Probleme dans mon code
BELORD
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Error :
Exception in thread "main" java.lang.NullPointerException
at p2.Parser.parseDate(Parser.java:16)
at p2.Parser.main(Parser.java:28)
Code :
Error :
Exception in thread "main" java.lang.NullPointerException
at p2.Parser.parseDate(Parser.java:16)
at p2.Parser.main(Parser.java:28)
Code :
package p2; import java.util.StringTokenizer; import java.util.NoSuchElementException; public class Parser { static public String[][] parseDate(String date) throws DateInvalideException { StringTokenizer str = new StringTokenizer(date,"-"); String[][] tab = new String[2][]; try { int j=0,i=0; while(str.hasMoreTokens()){ tab[i][j] = str.nextToken(); j++; } return tab; } catch(NoSuchElementException ex){ throw new DateInvalideException(); } } public static void main(String[] args) throws DateInvalideException{ String date[][] = Parser.parseDate("01-15-2009"); System.out.println("v1 "+date[0][1] ); System.out.println("v1 "+date[0][2] ); System.out.println("v1 "+date[0][3] ); } }
A voir également:
- Probleme dans mon code
- Code ascii - Guide
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
Tu as String[][] tab = new String[2][]; ce qui signifie que les tab[i] sont initialisés à null, donc tu ne peux pas utiliser tab[i][j] dans tab[i][j] = str.nextToken();
Il faut que tu initialises tab[i] soit en donnant une taille dès sa création (new String[2][10]; par exemple), soit en lui affectant un nouveau tableau (tab[i]=new String[10]; par exemple). Mais vu ce que tu veux, tu peux tout simplement faire comme ça :
Remarque : de manière générale, on ne devrais plus utiliser la classe StringTokenizer (voir la documentation de StringTokenizer), mais utiliser à la place la méthode split comme je l'ai fait, ou les classes du package java.util.regexLa confiance n'exclut pas le contrôle
Il faut que tu initialises tab[i] soit en donnant une taille dès sa création (new String[2][10]; par exemple), soit en lui affectant un nouveau tableau (tab[i]=new String[10]; par exemple). Mais vu ce que tu veux, tu peux tout simplement faire comme ça :
public static String[] parseDate(String date) { return date.split("-"); } public static void main(String[] args) { String date[] = Parser.parseDate("01-15-2009"); System.out.println("v1 "+date[0]); System.out.println("v1 "+date[1]); System.out.println("v1 "+date[2]); }
Remarque : de manière générale, on ne devrais plus utiliser la classe StringTokenizer (voir la documentation de StringTokenizer), mais utiliser à la place la méthode split comme je l'ai fait, ou les classes du package java.util.regexLa confiance n'exclut pas le contrôle
mais à ce point j'ai plus un tableau à deux dimensions.
parce que mon but là c'est de stockés des entiers ds une dim, et l'autre des chaines de caractères que je vais définir par la suite
parce que mon but là c'est de stockés des entiers ds une dim, et l'autre des chaines de caractères que je vais définir par la suite
Ce n'est pas évident de deviner ce que tu n'as pas encore fait ! Vu que tu n'avais donné aucune explication sur ton code, je l'avais corrigé comme j'imaginais que tu aurais pu le vouloir...
Il faudrait donc plutôt avoir :
Il faudrait donc plutôt avoir :
public static String[][] parseDate(String date) { String[][] tab = new String[2][]; tab[0] = date.split("-"); tab[1] = // chaines de caractères à définir return tab; }