Erreur indice dans mon programme
cocolapine
-
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 ;
}
}
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:
- Erreur indice dans mon programme
- Indice téléphonique - Guide
- Programme demarrage windows - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Message programmé - Guide
- Mettre en veille un programme - Guide
2 réponses
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.
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.
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.
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.
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 ;
}
}
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 ;
}
}
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