Probleme dans mon code
BELORD
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
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] );
}
}
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 :
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-
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 :
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; }
-