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

Résolu
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. 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

    1. 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. Modérateur
        Ç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
    2. 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. Modérateur
        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
    3. Bonjour,
      je ne comprend pas assez,pouvez vous me donnez plus explication, svp.
      0
      1. Modérateur
        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
    4. Modérateur
      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