[java]Exception in thread "main" java.lang.StackOverflowError

Résolu
domxaline -  
 domxaline -
Bonjour,
en executant mon prg j'ai une erreur message suivantes.veuillez m'aidez svp

Exception in thread "main" java.lang.StackOverflowError
at Test3.caracterDansChaine(Test3.java:12)


public class Test3
{
public static void main(String[] args)
{
String nom="KENNEDY";
char t='N';
System.out.println(caracterDansChaine(nom , t));
}
public static boolean caracterDansChaine(String nom,char t)
{
if(caracterDansChaine(nom,t))
{
System.out.println("Le caractère"+t+"se trouve bien dans"+nom);
}
else
{
System.out.println("Le caractère"+t+" ne se trouve bien dans"+nom);
}
return false;
}
}


6 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

Le problème c'est que
caracterDansChaine(String nom,char t)
, fait un
if (caracterDansChaine(nom,t))
qui appelle donc la même méthode avec les même arguments, elle va donc encore faire un
if (caracterDansChaine(nom,t))
puis encore un autre, et un autre, à l'infini, jusqu'à planter le programme...
0
domxaline
 
Bonjour,
je ne comprend pas assez,pouvez vous me donnez plus explication, svp.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Modifies ton code comme ceci, pour afficher quand tu rentres dans ta méthodes.
Tu verras mieux ce qui se passe :

public static boolean caracterDansChaine(String nom,char t)
{
    System.out.println("caracterDansChaine(nom="+nom+", t="+t+");");

    if(caracterDansChaine(nom,t))
    ...
0
domxaline
 
j'avais rectifié comme vous avez dit,après exécution de prg,j'ai aucune erreur ni output

public class Test3
{
public static void main(String[] args)
{
String nom="KENNEDY";
char t='N';
//System.out.println(caracterDansChaine(nom, t));
}
//public static boolean caracterDansChaine()
public static boolean caracterDansChaine(String nom, char t)
{
//System.out.println("caracterDansChaine(nom="+nom+"",t=+t+);";
System.out.println("caracterDansChaine(nom="+nom+",t="+t);
if(caracterDansChaine(nom,t))
{
System.out.println("Le caractère"+t+"se trouve bien dans"+nom);
}
else
{
System.out.println("Le caractère"+t+" ne se trouve bien dans"+nom);
}
return false;
}
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu n'as plus d'affichage parce que ton programme ne fait plus rien, dans ton main tu as commenté la ligne qui fait l'appel à la méthode. En gros ton programme actuel fait :

public class Test3 
{
    public static void main(String[] args) 
    {
        String nom="KENNEDY";
        char t='N';
    }
}

Normal qu'il n'y ait rien d'affiché...
0
domxaline
 

public static void main(String[] args)
{
String nom="KENNEDY";
char t='N';
System.out.println(caracterDansChaine(nom, t));
}
quand j'enlève "//" devant System.out.println

j'ai un output:
caracterDansChaine(nom=KENNEDY,t=N
caracterDansChaine(nom=KENNEDY,t=N
caracterDansChaine(nom=KENNEDY,t=N......
......

je veux un output si
Le caractère N se trouve bien dans KENNEDY
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Ça j'ai bien compris, mais pour l'instant ton code tourne en rond. D'où ton affichage, et ton exception. Essayes déjà de comprendre pourquoi, mon explication n'a pas l'air de t'avoir aidé, pourtant l'erreur est flagrante !

Donc comprends pourquoi ton code ne marche pas, et modifies ce qui ne vas pas pour que ça marche...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
domxaline
 
voilà j'ai résolu mon prg

public class Test1
{
public static void main(String[] args)
{
char t='S';
String nom="KENNEDY";
if(caracterDansChaine(nom,t))
{
System.out.println("Le caracter "+t+"se trouve bien dans "+nom);
}
else
{
System.out.println("Le caracter "+t+" ne se trouve pas dans "+nom);
}
}
public static boolean caracterDansChaine(String chaine,char c)
{
boolean verite=false;
for(int i=0;i<chaine.length();i++)
{
if(chaine.charAt(i)==c)
{
verite=true;
break;
}
}
return verite;
}

}

0
domxaline
 
merci pour vos aides
0