Probleme dans mon code

Fermé
BELORD - 17 janv. 2013 à 22:41
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 17 janv. 2013 à 23:40
Bonjour,


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:

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
Modifié par KX le 17/01/2013 à 23:24
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
0
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
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
17 janv. 2013 à 23:40
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;
}
0