Argument depuis constructeur dans limite tableau

Argument depuis constructeur dans limite tableau - Java - Programmation

Marsh Posté le 01-12-2004 à 20:27:23    

Bonsoir ,  
je débute en java et j'ai déja un probleme ou je vois vraiment pas ou est le probleme :p
j'ai :  

Code :
  1. class NbPremiers {
  2.   public NbPremiers(int max) {
  3.     int n = max ;
  4.       }
  5. (......)
  6. boolean [] t = new boolean[n] ; //!!! erreur ici !!!
  7. private int n ;


 
 
J'obtiens ( a la compilation ) :
illegal forwad reference
boolean [] t = new boolean [n] ;
                            ^
 
Merci pour votre aide  :)


Message édité par KristaaL le 01-12-2004 à 22:38:00
Reply

Marsh Posté le 01-12-2004 à 20:27:23   

Reply

Marsh Posté le 01-12-2004 à 20:34:16    

ben ton entier n n'est visible que dans le code de ton constructeur là...
 
... ha ben tu le déclare déjà au niveau classe, alors ton erreur c'est simplement que tu en redeclares un autre ds le cteur... donc dans ton cteur tu met "n=max" et hop
(ou this.n = max; pour plus de lisibilité)
 
(declare tes variables membres de classes en haut)


Message édité par the real moins moins le 01-12-2004 à 20:34:26

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 21:09:53    

Autant pour moi en fait le code dans le constructeur était simplement n = max ; ( pas de 2 eme déclaration ) c 'est juste au moment de recopier .. Le probleme vient en effet du fait que la déclaration était aprés .. Mais pourtant si mes souvenirs sont bons ( apprament mauvais ) c'est pas d'abord : 1 - Initialisation nulle , initialisation explicite , et initialisation depuis le constructeur ? : s

Reply

Marsh Posté le 01-12-2004 à 21:31:29    

euh, balance un bout de code complet, là j'ai du mal à voir ce que tu veux et ou etait ton probleme
(parce que le fait que la declaration soit en bas de classe n'influence pas le comportement dans ce cas-ci, ct juste une remarque pour la lecture)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 22:22:41    

En fait si

Code :
  1. private int n ;

se trouve avant la déclaration

Code :
  1. boolean [] t = new boolean[n] ;


ca marche , sinon erreur de compilation , c'est la que j'ai du mal je croyais que l'ordre n'avait pas d influence . sinon mon code complet ( c'est mon premier code en java et mon niveau math est 2nde donc no critique :p )  

Code :
  1. class NbPremiers {
  2. private int n ;
  3. private int temp ;
  4. private int i ;
  5. private int j ;
  6. private int k ;
  7.   public NbPremiers(int recu) {
  8.       n = recu ;
  9.       }
  10. boolean [] t = new boolean[n] ;
  11. public void Calcul() {
  12.     for (i = 2; i < t.length; i++) {
  13.       t[i] = true;
  14.     }
  15.     toj : for (j = 2; j < t.length; j++) {
  16.       if (t[j] == false) {
  17.         continue toj;
  18.       }
  19.       else {
  20.         for (temp = j + j; temp < t.length; temp += j) {
  21.           t[temp] = false;
  22.         }
  23.       }
  24.     }
  25.   }
  26. public void Affiche () {
  27.       for (k=1 ; k < t.length ; k++) {
  28. if ( t[k] == true ) {
  29.         System.out.println(k);
  30.       }
  31. }
  32. }
  33. }
  34. }
  35. public class Cherche {
  36. public static void main (String[] args) {
  37.   System.out.println("Donnez un entier :" );
  38.      int recu = Clavier.lireInt();
  39. NbPremiers test = new NbPremiers(recu);
  40.     test.Calcul();
  41.     test.Affiche();
  42.     }
  43. }


 
par contre t.length vaut 0 si je lui met en parametre n ( new boolean[n] ) alors que si je fais un System.out.println(n) ;
il m'affiche bien la valeur recue en argument et le code marche si je met directement un int dans la déclaration ( ex : new boolean [9999] ; )


Message édité par KristaaL le 01-12-2004 à 22:26:35
Reply

Marsh Posté le 01-12-2004 à 22:24:32    

noms de methodes -> une minuscule en premier caractere
 
ton int n était ou avant?
 
"Cherche" est dans le meme source que NbPremiers?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 22:26:02    

aprés la déclaration de la méthode Affiche ()
Cherche est dans le meme source que NbPremiers ( Cherche.java )

Reply

Marsh Posté le 01-12-2004 à 22:30:56    

KristaaL a écrit :

aprés la déclaration de la méthode Affiche ()

euh, tu l'avais sans doute mis en dehors de la classe NbPremiers alors... !?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 22:33:47    

nan c'est ca le pire : '( je comprends rien

Reply

Marsh Posté le 01-12-2004 à 22:34:22    

balance le code qui compile pas pour voir :p


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 22:34:22   

Reply

Marsh Posté le 01-12-2004 à 22:35:45    

Code :
  1. class NbPremiers {
  2. private int temp ;
  3. private int i ;
  4. private int j ;
  5. private int k ;
  6.   public NbPremiers(int recu) {
  7.       n = recu ;
  8.       }
  9. boolean [] t = new boolean[n] ;
  10. public void calcul() {
  11.     for (i = 2; i < t.length; i++) {
  12.       t[i] = true;
  13.     }
  14.     toj : for (j = 2; j < t.length; j++) {
  15.       if (t[j] == false) {
  16.         continue toj;
  17.       }
  18.       else {
  19.         for (temp = j + j; temp < t.length; temp += j) {
  20.           t[temp] = false;
  21.         }
  22.       }
  23.     }
  24.   }
  25. public void affiche () {
  26.       for (k=1 ; k < t.length ; k++) {
  27. if ( t[k] == true ) {
  28.         System.out.println(k);
  29.       }
  30. }
  31. }
  32. private int n ;
  33. }
  34. public class Cherche {
  35. public static void main (String[] args) {
  36.   System.out.println("Donnez un entier :" );
  37.      int recu = Clavier.lireInt();
  38. NbPremiers test = new NbPremiers(recu);
  39.     test.calcul();
  40.     test.affiche();
  41.     }
  42. }

Reply

Marsh Posté le 01-12-2004 à 22:46:11    

Initialise ton tableau 't' dans ton constructeur après avoir initialisé 'n'.

Reply

Marsh Posté le 01-12-2004 à 22:48:04    

ha ouais j'avais pas vu, ça [:slackerbitch]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 01-12-2004 à 22:50:01    

J'ai déja essayé :'( mais la j'ai un autre probleme partout ou je veux utiliser t[] il me met impossible de résoudre le symbole t a la ligne ...

Reply

Marsh Posté le 01-12-2004 à 22:50:44    

comme si le constructeur gardait 't' rien que pour lui

Reply

Marsh Posté le 01-12-2004 à 22:56:03    

Il faut initialiser t dans ton constructeur, mais la déclaration doit rester dans la portée de ta classe :
 

Code :
  1. class NbPremiers {
  2.     boolean[] t;
  3.     /* ... */
  4.     NbPremiers(int recu) {
  5.         t = new boolean[recu];
  6.     }
  7. }


 
(note que ta variable 'n' ne sert à rien dans ton code et que je considère ici que 'recu' a une valeur correcte pour la taille d'un tableau)


Message édité par Profil supprimé le 01-12-2004 à 23:02:46
Reply

Marsh Posté le 02-12-2004 à 07:19:36    

Merci beaucoup . Je croyais qu une initialisation pouvait se faire dans le constructeur :p  
( en effet 'n' ne sert plus a rien (avant elle servait pour la methode affiche () )  encore merci et bonne journée !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed