[java]Exception in thread "main" java.lang.StackOverflowError [Résolu/Fermé]

Signaler
-
 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

Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
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...
Bonjour,
je ne comprend pas assez,pouvez vous me donnez plus explication, svp.
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
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))
    ...
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;
}
}
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
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é...

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
Messages postés
16054
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
9 octobre 2020
2 696
Ç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...
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;
}

}

merci pour vos aides