[Résolu] Afficher un tableau Java
Dernière réponse : dans Programmation
Bonjour,
Petit problème de lecture en java...
Voilà mon code :
Voilà mon erreur :
Exception in thread "main" java.lang.NullPointerException
at tableau.getEntries(tableau.java:14)
at tableau.main(tableau.java:24)
Je n'arrive pas afficher ne serait-ce qu'une case de mon tableau en passant par des méthodes.
Quelqu'un a une idée ?
D'avance merci !!
Petit problème de lecture en java...
Voilà mon code :
public class tableau
{
//variables
public String[] m_entries;
//constructor
public tableau()
{
String m_entries[] = {"ordinateur","clavier","souris","écran"};
}
//méthodes
public void getEntries()
{
System.out.println("Affiche la case 1 : " +m_entries[1]);
// for (String entries : m_entries)
// {
// System.out.println(entries);
// }
}
public static void main (String[] args)
{
tableau tableau = new tableau();
tableau.getEntries();
}
}
Voilà mon erreur :
Citation :
Exception in thread "main" java.lang.NullPointerException
at tableau.getEntries(tableau.java:14)
at tableau.main(tableau.java:24)
Je n'arrive pas afficher ne serait-ce qu'une case de mon tableau en passant par des méthodes.
Quelqu'un a une idée ?
D'avance merci !!
Autres pages sur : resolu afficher tableau java
Lassé par la pub ? Créez un compte
Bonjour,
Ce qu'il te dit, c'est que tu as fais une déclaration de trop. Je m'explique :
Signifie que tu as créé une class qui se nomme tableau (au passage, mets toujours une majuscule sur la première lettre d'une classe, soit Tableau) et cette classe "tableau" contient une variable définie comme un tableau de String (chaîne de caractères).
Jusque là, tout vas bien, mais voila :
Dans ton constructeur (la méthode qui "initialise" ton objet lors de la création), tu fais une nouvelle déclaration :
"String m...."
Donc la variable de ta classe n'est pas définie, et elle vaut null.
Ce que tu aurais du faire :
Comme tu peux le voir, il suffit d'enlever le "String ".
Et si tu veux une meilleur visibilité :
Le "this." fait référence à soit même, donc à l'objet qui s'initialise. Et là tu peux pas te tromper, tu affectes une valeur à la variable de la classe et pas autre chose.
Voila, c'est tout, en espérant avoir été clair !
Ce qu'il te dit, c'est que tu as fais une déclaration de trop. Je m'explique :
public class tableau { //variables public String[] m_entries;
Signifie que tu as créé une class qui se nomme tableau (au passage, mets toujours une majuscule sur la première lettre d'une classe, soit Tableau) et cette classe "tableau" contient une variable définie comme un tableau de String (chaîne de caractères).
Jusque là, tout vas bien, mais voila :
//constructor public tableau() { String m_entries[] = {"ordinateur","clavier","souris","écran"}; }
Dans ton constructeur (la méthode qui "initialise" ton objet lors de la création), tu fais une nouvelle déclaration :
"String m...."
Donc la variable de ta classe n'est pas définie, et elle vaut null.
Ce que tu aurais du faire :
//constructor public tableau() { m_entries = {"ordinateur","clavier","souris","écran"}; }
Comme tu peux le voir, il suffit d'enlever le "String ".
Et si tu veux une meilleur visibilité :
//constructor public tableau() { this.m_entries = {"ordinateur","clavier","souris","écran"}; }
Le "this." fait référence à soit même, donc à l'objet qui s'initialise. Et là tu peux pas te tromper, tu affectes une valeur à la variable de la classe et pas autre chose.
Voila, c'est tout, en espérant avoir été clair !
Tu l'as mis où le "this." ?
Tu as bien tout tapé comme je le montrais ?
(tu as peut être oublié d'enlever les "[]" ?)
Tiens, comme je suis de bonne humeur, un cadeau :
Tu as bien tout tapé comme je le montrais ?
(tu as peut être oublié d'enlever les "[]" ?)
Tiens, comme je suis de bonne humeur, un cadeau :
public class Tableau { public String[] m_entries; public Tableau(String... tableau) { this.m_entries = tableau; } @Override public String toString() { if (this.m_entries == null || this.m_entries.length <= 0) return "empty array"; String result = ""; for (int i = 0; i < this.m_entries.length; i++) result += "[" + i + "] = " + this.m_entries[i] + "\n"; return result; } public static void main (String[] args) { System.out.println(new Tableau("ordinateur","clavier","souris","écran")); } }
ah oui... intéressant ! rien à voir avec ce que j'ai fait mais le résultat est nikel !
Je vais essayer d'intégrer ça dans mon programme maintenant...
Tu comprendras que j'aie plein de questions à poser
On est donc obligé de déclarer les variables dans la méthode main ?
Qu'est-ce dont que ces "..." après String ? dans :
# public Tableau(String... tableau) {
# this.m_entries = tableau;
# }
Je ne peux pas conserver le "public void getEntries()" si je veux faire ce que je veux faire ?
Enfin, tu me comprends... enfin, j'espère !
Je vais essayer d'intégrer ça dans mon programme maintenant...
Tu comprendras que j'aie plein de questions à poser
On est donc obligé de déclarer les variables dans la méthode main ?
Qu'est-ce dont que ces "..." après String ? dans :
# public Tableau(String... tableau) {
# this.m_entries = tableau;
# }
Je ne peux pas conserver le "public void getEntries()" si je veux faire ce que je veux faire ?
Enfin, tu me comprends... enfin, j'espère !
tomsgeek a dit :
Tu comprendras que j'aie plein de questions à poser
C'est normal, j'ai mis un code spécialement formateur qui t'obliges à poser des question si tu veux comprendre ! (sauf quand tu connais les principes de Java)
tomsgeek a dit :
On est donc obligé de déclarer les variables dans la méthode main ?Non, absolument pas, je t'ai juste fais une classe qui se paramètre à la création.
En soit, c'est juste qu'ainsi on peut utiliser l'objet avec d'autres choses que "ordinateur", "clavier", etc...
Par exemple, ajoute dans le main
System.out.println(new Tableau("toto","tata","tutu")); System.out.println(new Tableau("foo","bar")); System.out.println(new Tableau());
Ce qui donne :
public static void main (String[] args) { System.out.println(new Tableau("ordinateur","clavier","souris","écran" )); System.out.println(new Tableau("toto","tata","tutu")); System.out.println(new Tableau("foo","bar")); System.out.println(new Tableau()); }
Tu remarqueras que tout cela fonctionne très bien !
tomsgeek a dit :
Qu'est-ce dont que ces "..." après String ?Il s'agit d'une petite astuce de Java (depuis la version 1.5 il me semble) et qui permet de définir une méthode avec un nombre de paramètres variables !
Si tu reprends mes exemples précédents :
new Tableau("ordinateur","clavier","souris","écran") new Tableau("toto","tata","tutu") new Tableau("foo","bar") new Tableau()
Tu remarqueras (j'espère) que je crée un objet Tableau mais pas avec le même nombre de paramètre !
(4 paramètre pour tes chaines, 3 pour le "toto" etc., 2 pour le "foo" etc., et 0 pour le dernier)
Au final, le type de "tableau" dans le constructeur est équivalent à un tableau de String. Donc "tableau" est de type "String[]".
Mais en définissant avec cette forme :
public Tableau(String[] tableau)
Tu es obligé de définir un tableau à l'initialisation, il n'y a qu'un seul paramètre et tu ne peux pas faire "new Tableau()".
Donc "String..." est une petite astuce, mais qui s'utilise avec précaution.
Ceci "void toto(int... i, float f)" est interdit ! Ne connaissant pas le nombre de paramètres à l'avance, il y aura une erreur puisque java sera incapable de savoir quand il prend le dernier !
L'utilisation du '...' doit être en dernière position : "void toto(float f, int... i)"
(rappel : 'int...' = 'int[]' comme vue ci-dessus)
tomsgeek a dit :
Je ne peux pas conserver le "public void getEntries()" si je veux faire ce que je veux faire ?Si si, tu peux très bien le conserver !
J'ai utilisé une autre facilité de java. La méthode "toString()" existe pour tous les objets. Je l'ai "surchargé" (d'où le @Override au dessus) pour lui spécifier un fonctionnement spécifique.
Et l'avantage de cette méthode, c'est que java l'appellera dès qu'il devra utiliser l'objet dans une chaîne.
(le "println()" attendant un String, java convertira tout seul le "new Tableau(...)" en "(new Tableau(...)).toString()" )
Mais tu peux très bien utiliser ta méthode précédente, elle s'utilise comme tu le faisais tout en haut !
Ce n'est pas incompatible.
Je me suis juste dis que ça pourrait être intéressant de te montrer ça ...
Bonsoir,
Merci pour tes explications. En effet, c'est très intéressant. Je n'ai pas encore appliqué.... en fait ce petit morceau de programme fait partie d'un plus gros... Je travaille d'abord sur ce fameux tableau qui me bloque tout le reste. J'ai du mal à l'adapter et l'intégrer, je pense avoir tout les éléments, reste plus qu'à se prendre la tête !
Je ne comprends pas ces lignes :
C'est un test de condition pour ne pas traiter un tableau vide non ?
si j'utilise un void, je ne peux pas faire ce test ? Vu que d'après ce que j'ai compris : pas de return pour un void
Aussi le "+=" ?!
Si t'es toujours dans le coin et motivé pour une réponse ?!
Merci pour tes explications. En effet, c'est très intéressant. Je n'ai pas encore appliqué.... en fait ce petit morceau de programme fait partie d'un plus gros... Je travaille d'abord sur ce fameux tableau qui me bloque tout le reste. J'ai du mal à l'adapter et l'intégrer, je pense avoir tout les éléments, reste plus qu'à se prendre la tête !
Je ne comprends pas ces lignes :
if (this.m_entries == null || this.m_entries.length <= 0)
return "empty array";
C'est un test de condition pour ne pas traiter un tableau vide non ?
si j'utilise un void, je ne peux pas faire ce test ? Vu que d'après ce que j'ai compris : pas de return pour un void
Aussi le "+=" ?!
Si t'es toujours dans le coin et motivé pour une réponse ?!
Bonsoir,
Je ne comprends pas ces lignes :
C'est un test de condition pour ne pas traiter un tableau vide non ?
Oui, du coup ça retourne une chaine de caractères contenant "empty array".
si j'utilise un void, je ne peux pas faire ce test ? Vu que d'après ce que j'ai compris : pas de return pour un void
Tu peux faire tous les tests que tu veux, mais tu n'utiliseras pas "return...", tout dépend ce que tu veux faire avec ta fonction.
Aussi le "+=" ?!
Le fait d'écrire "result +=..." est équivalent à "result = result +..."
++
tomsgeek a dit :
Je ne comprends pas ces lignes :
if (this.m_entries == null || this.m_entries.length <= 0)
return "empty array";
C'est un test de condition pour ne pas traiter un tableau vide non ?
Oui, du coup ça retourne une chaine de caractères contenant "empty array".
tomsgeek a dit :
si j'utilise un void, je ne peux pas faire ce test ? Vu que d'après ce que j'ai compris : pas de return pour un void
Tu peux faire tous les tests que tu veux, mais tu n'utiliseras pas "return...", tout dépend ce que tu veux faire avec ta fonction.
tomsgeek a dit :
Aussi le "+=" ?!
Le fait d'écrire "result +=..." est équivalent à "result = result +..."
++
Lassé par la pub ? Créez un compte
- Contenus similaires :
Tags :
- ForumAfficher tableau java
- ForumAfficher un tableau sous java
- ForumAfficher un tableau java
- ForumAfficher tableau java 2 dimension
- solutionsAfficher un tableau avec java
- ForumAfficher un tableau d'entier en java
- ForumAfficher contenu d'un tableau java
- ForumTableau java afficher
- articlesAfficher contenu tableau java
- ForumAfficher valeur tableau java
- Voir plus