Questions sur la programmation en java [Résolu/Fermé]

Signaler
Messages postés
3
Date d'inscription
mercredi 9 novembre 2011
Statut
Membre
Dernière intervention
22 décembre 2011
-
 azerty0123 -
Bonjour,

Je suis novice en informatique et dans le cadre de ma licence je fais du langage Java.

Tout d'abord j'aimerai savoir ce que signifie SetN, en effet dans un examen, j'ai eu l'exercice suivant:

Qu'af?che le programme Java contenant ces deux classes lors de son execution ?


Soit les deux classes Java suivantes :
p u b l i c c l a s s Main f
p u b l i c s t a t i c v o id main ( S t r i n g [ ] a r g s ) f
To to a ;
a = new To to ( ) ;
a . s e tN ( 1 ) ;
System . o u t . p r i n t l n ( a . a f f i c h e ( ) ) ;
a . s e tN ( 7 ) ;
System . o u t . p r i n t l n ( a . a f f i c h e ( ) ) ;
a . s e tN ( 8 ) ;
System . o u t . p r i n t l n ( a . a f f i c h e ( ) ) ;
a . s e tN ( 1 2 ) ;
System . o u t . p r i n t l n ( a . a f f i c h e ( ) ) ;
a . s e tN ( 3 7 ) ;
System . o u t . p r i n t l n ( a . a f f i c h e ( ) ) ;

et
p u b l i c c l a s s To to f
p r i v a t e i n t n ;
p u b l i c To to ( ) f
t h i s . n = 0 ;

p u b l i c v o id s e tN ( i n t n ) f
t h i s . n = n ;

p u b l i c S t r i n g a f f i c h e ( ) f
i n t i ;
i n t j = t h i s . n ;
S t r i n g r e s = "" ;
w h ile ( j > 0 )
i = j % 8 ;
r e s = S t r i n g . v a lu e O f ( i ) + r e s ;
j = j / 8 ;

r e t u r n r e s ;


J'ai aussi un soucis avec les classes, je ne vois pas trop ce que c'est, est ce que le deuxieme programme est une classe?

En esperant une réponse de votre part, je vous remercie infiniment.

3 réponses

Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
Les deux fichiers sont des classes (ils commencent par le mot clé "class")
"Exécuter un programme" c'est appeler une méthode main d'une classe.
Ici, il s'agit de la méthode main de la classe Main où l'objet a est une instance de la classe Toto, donc a.setN est un appel à la méthode setN défini dans la classe Toto...

PS : la prochaine fois que tu fais le copier-coller d'un code, assures-toi que celui-ci reste lisible, parce qu'avec des espaces partout et les accolades en moins, c'est horrible à lire !
Desolé, je n'ai pas fait attention ^^

p u b l i c c l a s s Toto { Là on définit la classe qu'on appel toto
p r i v a t e i n t n ; Là on définit n, mais pourquoi on met private devant alors?
p u b l i c Toto ( ) {
t h i s . n = 0 ;
On définit n à 0, si j'ai bien compris on met this.n pour definir une valeur de n
}
p u b l i c void s e tN ( i n t n ) { Ici, on définit la fonction SetN
t h i s . n = n ; On redefinit n comme etant egale à n et non plus à 0
}

p u b l i c S t r i n g a f f i c h e ( ) { Fonction affiche
i n t i ;
i n t j = t h i s . n ;
S t r i n g r e s = " " ; Ici, pourquoi on met String res et non pas int res?
wh i l e ( j > 0) {
i = j % 8 ;
Le % me pose probleme, c'est pas divisé, donc c'est quoi? par exemple 14 %8 ca donne quoi?
r e s = S t r i n g . va lueOf ( i ) + r e s ;
cela signifie res=valeur de i + valeur de res? Mais res = " " rien en faites.
j = j / 8 ;
Pourquoi definir j=j/8 apres avoir ecrit la valeur de res, la valeur de i depend de j, mais on prend j comme etant egale à n, et maintenant on veut j=j/8, je comprends plus trop.

}
r e t u r n r e s ;
}
}

Voila le programme réecrit correctement.
Je comprends mieu certaine chose, mais maintenant ce qui me pose probleme c'est que le programme doit afficher 1, 7, 10, 14, 45. J'ai mis en gras ce que je pensais avoir compris et les questions que je me pose.

Ca serait vraiment très gentil de m'expliquer ça. Je pense que ça pourrait grandement m'aider.

Merci infiniment :)
Je viens de comprendre ce que signifiais %, c'est le reste de la division, mais si on a 1%8 ou alros 7%8 ça donne quoi?
c'est bete comme question, mais en java ca donnerai quoi?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
"Voila le programme réecrit correctement.", je suis désolé mais il y a une différence énorme de lisibilité entre par exemple "p u b l i c c l a s s Toto" et "public class Toto"...

"pourquoi on met private" : regarde ce qu'est l'accessibilité
"on met this.n pour definir une valeur de n" : pas n'importe laquelle, uniquement celle de l'objet courant (this), ici faire this.n=0 est exactement pareil que faire n=0 (this est implicite)
"on redefinit n" : non, on modifie sa valeur, la redéfinition c'est autre chose (voir l'héritage)
"pourquoi on met String et non pas int" : ça c'est parce qu'on ne veut plus un entier, mais une chaîne de caractères (regarde les types de données)
"Le % me pose probleme", c'est le reste de la division entière, donc a%b==a-(a/b)*b, 1%8==7%8==0
res = " " rien en faites, uniquement au départ, mais après tu modifies res, donc ce n'est plus vrai.
"Pourquoi definir j=j/8" : interroges toi sur ce que dois faire ton programme, en le testant par exemple, en le modifiant un peu, et le retestant, en ajoutant quelques affichages... Si tu ne modifies pas j, tu auras toujours les mêmes valeurs i et j dans ta boucle while, et ton programme fera toujours la même chose, sans s'arrêter (à cause de la condition d'arrêt j>0) !
Ahhhhh merci beaucoup c'est plus clair pour moi.

Mais alors pour n=1, ca veut dire que j=1, donc que i=0 (1%8==0) et donc que res=0 (car valeur of i==0 et res =0 au debut)).
Or dans la correction, le resutats est 1.
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
Il faut que tu décortiques ton code pour comprendre comment il marche

n=8, j=n(=8), res=""
i=j%8(=0), res=i+res(=0+""="0"), j=j/8(=8/8=1)
i=j%8(=1), res=i+res(=1+"0"="10"), j=j/8(=1/8=0)
return res(="10")
Donc si je fais pareil pour n=37:

n=37, j=37, res=" ";
i=j%8=37%8=5 donc res=5+" "="5", j=j/8=37/8=4
i=4%8=1 res=1+"5"="15" j=j/8=4/8=0
return res (="15")

Pourquoi je trouve 15 alors qu'on devrait trouver 45

Pour n=12, j=12, i=12%8=4 donc res=4+" "="4" j=12/8=1
i=1%8=1 donc res=1+"4" = "14" j=1/8=0
return res (=14)

La j'obtiens bien la bonne valeur donc pourquoi je ne trouve pas 45 pour n=37, où est mon erreur?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
i=4%8=4, res=4+"5"="45" j=j/8=4/8=0
pourquoi 4%8=4? 4/8 donne 0.5, donc ca doit etre comme 1%8 et 7%8 ca doit donner 1 nn?
Messages postés
16372
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
23 juillet 2021
2 856
7%8==7, c'est le reste de la division euclidienne, ici "4 divisé par 8 égal à 0, il reste 4" !
D'accord, c'est bon j'ai bien compris le programme maintenant, il m'auras fallu du temps. Merci beaucoup!!