Erreur indice dans mon programme

cocolapine -  
 cocolapine -
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 ;
}
}

2 réponses

laurie071298 Messages postés 209 Statut Membre 49
 
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
cocolapine
 
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
greg
 
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
cocolapine
 
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