[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

  1. KX Messages postés 19031 Statut Modérateur 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
  2. domxaline
     
    Bonjour,
    je ne comprend pas assez,pouvez vous me donnez plus explication, svp.
    0
    1. KX Messages postés 19031 Statut Modérateur 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
  3. 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
    1. KX Messages postés 19031 Statut Modérateur 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
  4. 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
    1. KX Messages postés 19031 Statut Modérateur 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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