[Java] Faire un tableau avec ce que je veux dedans

Faire un tableau avec ce que je veux dedans [Java] - Java - Programmation

Marsh Posté le 02-02-2005 à 19:42:20    

Bonjour.
Disclaimer : avant toute chose, sachez que je débute en java (et en programmation tout court...) :D
 
Je sais faire un tableau à deux entrées d'entiers avec :
 

Code :
  1. public class Tableau
  2. {
  3. int[][] T;
  4. public Tableau(int n)
  5. {
  6.  T = new int[n][n];
  7.  for (int i=0; i<n; i++)
  8.  {
  9.   T[i][i]=1;
  10.  }
  11. }
  12. }


 
Jusque là ça va. Bon y'a des 1 sur la diagonale, rien ailleurs, le but étant juste de tester si ça fonctionne, avec :  
 

Code :
  1. public class Main
  2. {
  3. public static void main(String args[])
  4. {
  5.  Tableau tableautest = new Tableau(5);
  6.  System.out.println(tableautest.T[3][3]);
  7. }
  8. }


 
et effectivement ça fonctionne parfaitement.
 
Maintenant, ce que je voudrais, c'est créer un tableau du même genre, mais ne contenant non pas des entiers, mais un objet que je nomme "Case" :
 

Code :
  1. public class Case
  2. {
  3. int test;
  4. }


 
Là c'est particulièrement stupide car une case n'a comme attribut qu'un entier, mais le but c'est de rendre ensuite les cases plus riches.
 
Et ça j'y arrive pas.
 
Si je crée une classe Tableau2 quasiment identique à la précédente, comme ça :
 

Code :
  1. public class Tableau2
  2. {
  3. Case[][] T;
  4. public Tableau2(int n)
  5. {
  6.  T = new Case[n][n];
  7.  for (int i=0; i<3; i++)
  8.  {
  9.   T[i][i].test=1;
  10.  }
  11. }
  12. }


 
le .test c'est pour essayer d'atteindre l'attribut "test" de la case (i,i)
 
Ben là ça déconne, quand j'utilise :
 

Code :
  1. public class Main
  2. {
  3. public static void main(String args[])
  4. {
  5.  Tableau2 tableautest2 = new Tableau2(5);
  6.  System.out.println(tableautest2.T[3][3].test);
  7. }
  8. }


 
je reçois le message d'erreur :
Exception in thread "main" java.lang.NullPointerException
at Tableau2.<init><Tableau2.java:10)
at Main.main<Main.java:5>

 
Svp j'ai l'impression d'avoir tout essayé, j'ai vraiment besoin d'un coup de pouce :'(


Message édité par Shaffan le 02-02-2005 à 20:08:47
Reply

Marsh Posté le 02-02-2005 à 19:42:20   

Reply

Marsh Posté le 02-02-2005 à 19:48:06    

Hum ...faudrait relire un peu le cours sur les objets...
 
Autre chose, edite ton poste, et met tes morceaux de codes entre balises [ code] ... [ /code] (sans les espaces)
 

Code :
  1. Ca donne ca


 
ensuite en objet y'a un concept qui s'appelle l'encapsulation : ca consiste à cacher de l'extérieur l'état interne de l'objet, en l'occurence ses variables.
Donc tu commences par faire ca :  

Code :
  1. public class case {
  2.     private int value; // stocke ta valeur
  3.     public int getValue() {
  4.         return this.value;
  5.     }
  6.     public void setValue(int value) {
  7.         this.value = value;
  8.     }


 
ensuite il te faut créer des objets cases avant de pouvoir les utiliser.


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 02-02-2005 à 19:56:17    

Malheureusement les cours sur les objets j'en ai quasiment pas eu :(
Je vais éditer mon 1er post.
 
Je vais essayer cette encapsulation, mais je ne vois pas trop comment ça va m'aider pour créer mon tableau :??:

Reply

Marsh Posté le 02-02-2005 à 19:57:02    

merci jubijub pour ce post aussi confituresque qu'inutile.
 
--> si le constructeur de Case prenait un int


T[i][i] = new Case(1);  


ou
-->


Case c = new Case();
c.truc = 1; // ou c.setTruc(1); // merci bubujuibjuj
T[i][i] = c;


Message édité par the real moins moins le 02-02-2005 à 19:57:22

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

Marsh Posté le 02-02-2005 à 20:13:20    

Ca m'a l'air plus simple ça, mais j'arrive pas à faire la 1ère méthode déjà - je vais essayer la 2e

Reply

Marsh Posté le 02-02-2005 à 20:16:23    

Avec la 1ere méthode tj, effectivement je n'ai plus l'erreur [b]at Tableau2.<init><Tableau2.java:10>[b]
par contre j'ai tj la 2e, celle qui soncerne le main (est-ce c'est juste ma syntaxe d'affichage qui est fausse ?!)

Reply

Marsh Posté le 02-02-2005 à 20:18:06    

Pour ton erreur regarde de ce coté là :
for (int i=0; i<3; i++)  
{  
    T[i][i].test=1;  
}


Message édité par koude le 02-02-2005 à 20:19:20
Reply

Marsh Posté le 02-02-2005 à 20:20:45    

En fait, ce que je voudrais, c'est très exactement :
afficher un attribut d'une Case x,y du tableau.
 
C'est pour ça que je fait : afficher "tableautest2.T[3][3].test" pour afficher l'attribut "test" de la case "T[3][3]" du tableau "tableautest2"
Mais ça marche tj pas :'(

Reply

Marsh Posté le 02-02-2005 à 20:22:03    

Merde j'suis trop con c'était ça ! Merci beaucoup ça fonctionne maintenant :jap: :jap:
 
EDIT : et désolé de vous avoir dérangé pour si peu


Message édité par Shaffan le 02-02-2005 à 20:22:26
Reply

Marsh Posté le 02-02-2005 à 20:22:19    

ta condition d'arret lors de l'initialisation est fausse

Reply

Marsh Posté le 02-02-2005 à 20:22:19   

Reply

Marsh Posté le 02-02-2005 à 21:47:52    

oui g oublié de lui mettre le constructeur...mais il était déjà pas super bien parti avec le coup de la variable public...c pas une super habitude à prendre...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 02-02-2005 à 21:58:26    

jj>bah oui mais bon, tout ça n'avait rien à voir avec la question, donc bon, si tu le mentionnes pas (que ça n'a rien à voir)... :o


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

Marsh Posté le 03-02-2005 à 00:01:16    

C'est bon vous battez pas :D
Tout ce que je voulais faire fonctionner tourne maintenant au poil ;)
Encore merci !

Reply

Marsh Posté le 03-02-2005 à 10:08:58    

Shaffan a écrit :

C'est bon vous battez pas :D
Tout ce que je voulais faire fonctionner tourne maintenant au poil ;)
Encore merci !


Ca suffit pas que ca marche, faudrait en plus que ca soit propre pour progresser dans la bonne direction :D
 
Le fait que ta classe Tableau expose sa variable d'instance T est non seulement dangereux mais en plus vraiment pas O-O ... si tu regardes bien tu constateras (entre autres choses) que l'interet de ta classe Tableau est nul, puisque tu l'utilises comme un bete tableau au travers de "Tableau.T" alors que tu devrais cacher son implementation par l'utilisation de methodes publiques ...


Message édité par Gonzoide le 03-02-2005 à 10:09:31
Reply

Marsh Posté le 03-02-2005 à 12:44:36    

Si l'intérêt de la classe tableau est nul, comment je peux faire un "bête tableau" mais qui comporte autre-chose que des entiers ?

Reply

Marsh Posté le 03-02-2005 à 13:17:47    

Shaffan a écrit :

Si l'intérêt de la classe tableau est nul, comment je peux faire un "bête tableau" mais qui comporte autre-chose que des entiers ?


 
 
Ben avec "Case[][] tableau" pour un tableau de cases, ou "Object[][] tableau" pour un tableau de n'importe quoi, pas la peine d'encapsuler ca dans une classe Tableau qui n'apporte rien (a part un contructeur qui pre-remplit les donnees).
 
Mais l'un comme l'autre ne sont pas objet du tout, bien sur  ... tu raisonnes en termes de stockage de donnees alors que tu devrais plutot raisonner en termes d'utilisation de donnees ... ta classe Tableau doit fournir une interface qui par exemple renvoie une Case particuliere pour un couple de coordonnees, c'est pas pour ca qu'en interne faut que ce soit un xxx[][]. Et encore moins que les utilisateurs de ta classe sachent qu'elle contient un tableau (ca c'est vraie heresie)  
 
Modelises tes besoins et une fois que c'est fait choisis la meilleure implementation.

Reply

Marsh Posté le 03-02-2005 à 13:33:56    

Ben en fait effectivement j'ai un constructeur dans ma classe tableau, qui remplit tous les paramètres de chaque case.
 
Pour l'hérésie désolé si t'es du genre inquisiteur, mais pour le moment je pige pas grand chose alors je fais ce que je sais faire - pour la beauté de la chose ce sera pour plus tard :/

Reply

Marsh Posté le 03-02-2005 à 13:46:27    

Shaffan a écrit :

Pour l'hérésie désolé si t'es du genre inquisiteur, mais pour le moment je pige pas grand chose alors je fais ce que je sais faire - pour la beauté de la chose ce sera pour plus tard :/


Je suis pas du tout inquisiteur, mais ce que tu fais c'est contraire a tous les principes OO ... tu ne fais qu'adapter des structures de donnees a la syntaxe Java, mais tu fais pas du Java, et tu n'essaies pas de comprendre ce qu'est Java. Ca serait du C#, du PHP ou du Visual Basic ca serait pareil. Errare humanum est, perseverare diabolicum.
 
C'est ca le premier (et le plus difficile) truc a comprendre avant de se mettre a un nouveau langage ... Java c'est un peu plus qu'une syntaxe, interesse-toi a tout ce qui fait ce langage avant de te lancer dans une programmation sans comprendre, tu te rendras service pour plus tard. Et si tu crois que c'est simplement "pour la beaute de la chose", c'est que t'as serieusement loupe un truc.


Message édité par Gonzoide le 03-02-2005 à 13:51:05
Reply

Marsh Posté le 03-02-2005 à 13:51:05    

gonzoide > faut laisser le temps à ces choses-là de décanter ;)
j'ai commencé java en "adaptant" des trucs que j'avais fait en php... j'aurais honte de montrer le résultat maintenant, mais ça n'empeche pas que j'ai progressé en oo ;) - tu peux pas tout encaisser à la fois


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

Marsh Posté le 03-02-2005 à 13:51:54    

the real moins moins a écrit :

gonzoide > faut laisser le temps à ces choses-là de décanter ;)
j'ai commencé java en "adaptant" des trucs que j'avais fait en php... j'aurais honte de montrer le résultat maintenant, mais ça n'empeche pas que j'ai progressé en oo ;) - tu peux pas tout encaisser à la fois


 
J'ai fait pareil au debut, mais j'ai toujours ecoute mes aines, en revanche. Comme je viens d'editer dans mom post : Errare humanum est, perseverare diabolicum

Reply

Marsh Posté le 03-02-2005 à 14:12:45    

:jap: [:joce]


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

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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