Erreur indice dans mon programme

Fermé
cocolapine - 15 mars 2008 à 13:07
 cocolapine - 15 mars 2008 à 15:22
Bonjour,

je débute vraiment en java, j'ai écris ce programme mais l'erreur suivante s'affiche:

java.lang.NullPointerException

elle concerne la ligne if(Champ.f(tab[k],1).compareTo(Champ.f(tab[imin],1))<0) dans la dernière boucle.
j'ai compris que cette erreur peut concerner un indice mais j'ai beau avoir vérifié plusieurs fois je ne comprends pas mon erreur.

si quelqu'un peut m'aider à y voir plus clair ça serait vraiment sympa!!

Cocolapine



public class Trierplots
{
public static void main (String [] zz)
{
int i, t, r=0, k=0, n=0, l=0, h ;
String chaine = "" ;
String [] tabPlots, tabTotal, tabTrie ;


Fic g = new Fic() ;
g.open("Vols.txt","r") ;

while(chaine!=null)
{
chaine = g.read() ;
n = n+1 ;
}
g.close() ;

g.open("Vols.txt","r") ;

for(i=0;i<n-1;i++)
{
chaine = g.read() ;
tabPlots = GenererPlots.f(chaine) ;
l=tabPlots.length ;

k = k+l ;
}

g.close() ;

tabTotal = new String [k] ;

g.open("Vols.txt","r") ;

for(i=0;i<n-1;i++)
{
chaine = g.read() ;
tabPlots = GenererPlots.f(chaine) ;
h = tabPlots.length ;

for(t=0;t<h;t++)
{
tabTotal[t+r] = tabPlots[t] ;
}

r = r + tabPlots.length ;
}

g.close() ;

tabTotal = new String [k] ;
tabTrie = f(tabTotal) ;

for(i=0;i<tabTrie.length;i++)
{
X.println(tabTrie[i]) ;
}

System.exit(0) ;

}



public static String [] f(String [] tab)
{
int n = tab.length, i, k, imin ;
String tampon ;

for(i=0;i<=n-2;i++)
{ imin = i ;

for(k=i+1;k<=n-1;k++)
{
if(Champ.f(tab[k],1).compareTo(Champ.f(tab[imin],1))<0)
{
imin = k ;
}
}

tampon = tab[imin] ;
tab[imin] = tab[i] ;
tab[i] = tampon ;
}

return tab ;
}
}
A voir également:

2 réponses

laurie071298 Messages postés 205 Date d'inscription lundi 28 mai 2007 Statut Membre Dernière intervention 5 octobre 2011 49
15 mars 2008 à 14:25
une erreur de type nullPointerException n'a rien a voir avec les indices de tableaux qui sont de type array out of ...
une null pointer exception signifie que tu as un objet qui ne vaut rien qui ne référencie rien .
Pour les éviter il vaut mieux initialiser tes champs et a tes vairables.
0
Bonjour,

merci d'avoir répondu

j'ai donc vérifié les initialisations de mes variables, puis comme j'ai toujours l'erreur j'ai isolé le programme de tri et je l'ai testé. il marche


public class essaitri
{
public static void main (String [] zz)
{
int i ;
String [] tableau = new String [4] ;

tableau[0] = "merci et bonjour" ;
tableau[1] = "bonjour et merci" ;
tableau[2] = "salut à vous" ;
tableau[3] = "pourquoi pas ?" ;

String [] resultat = new String [4] ;

resultat = f(tableau) ;

for(i=0;i<4;i++)
{
X.println(resultat[i]) ;
}

}


public static String [] f(String [] tab)
{
int n = tab.length, i=0, k=0, imin=0 ;
String a=null, b=null, tampon=null ;

for(i=0;i<n-1;i++)
{ imin = i ;

for(k=i+1;k<n;k++)
{
a = Champ.f(tab[k],1) ;
b = Champ.f(tab[imin],1) ;
if(a.compareTo(b)<0)
{
imin = k ;
}
}

tampon = tab[imin] ;
tab[imin] = tab[i] ;
tab[i] = tampon ;
}

return tab ;
}
}

mais alors au final je ne comprends toujours pas ce qui cloche dans mon Trierplots
0
Salut,

en regardant assez rapidement le code ... ma remarque c'est qu'il ne faut pas mettre autant de chose sur la même ligne, c'est catastrophique pour la lisibilité. !

if(Champ.f(tab[k],1).compareTo(Champ.f(tab[imin],1))<0) BEURK !

Par contre ça devrait pouvoir s'écrire comme ceci en rajoutant une parenthèse, même si c'est affreux à voir :

if( (Champ.f(tab(K],1)).compareTo(Champ.f(tab[imin],1)) < 0)

car la méthode compareTo est une méthode de l'objet (Champ.f(tab(K],1)) et non pas de f(tab[k],1) ... :-)

Bon courage.
0
et comme ça c plus joli ? en affectant Champ.f(tab[k],1) dans a et Champ.f(tab[imin],1) dans b
mais ça marche pas mieux


public class Trierplots
{
public static void main (String [] zz)
{
int i, t, r=0, k=0, n=0, l=0, h ;
String chaine = "" ;
String [] tabPlots, tabTotal, tabTrie ;


Fic g = new Fic() ;
g.open("Vols.txt","r") ;

while(chaine!=null)
{
chaine = g.read() ;
n = n+1 ;
}
g.close() ;

g.open("Vols.txt","r") ;

for(i=0;i<n-1;i++)
{
chaine = g.read() ;
tabPlots = GenererPlots.f(chaine) ;
l=tabPlots.length ;

k = k+l ;
}

g.close() ;

tabTotal = new String [k] ;

g.open("Vols.txt","r") ;

for(i=0;i<n-1;i++)
{
chaine = g.read() ;
tabPlots = GenererPlots.f(chaine) ;
h = tabPlots.length ;

for(t=0;t<h;t++)
{
tabTotal[t+r] = tabPlots[t] ;
}

r = r + tabPlots.length ;
}

g.close() ;

tabTotal = new String [k] ;
tabTrie = new String [k] ;
tabTrie = f(tabTotal) ;

for(i=0;i<tabTrie.length;i++)
{
X.println(tabTrie[i]) ;
}

System.exit(0) ;

}



public static String [] f(String [] tab)
{
int n = tab.length, i=0, k=0, imin=0 ;
String a=null, b=null, tampon=null ;

for(i=0;i<n-1;i++)
{ imin = i ;

for(k=i+1;k<n;k++)
{
a = Champ.f(tab[k],1) ;
b = Champ.f(tab[imin],1) ;
if(a.compareTo(b)<0)

{
imin = k ;
}
}

tampon = tab[imin] ;
tab[imin] = tab[i] ;
tab[i] = tampon ;
}

return tab ;
}
}
0