2 votes

Un code très simple pour la recherche d'un nombre me donne une boucle infinie.

Je suis un étudiant débutant en informatique et j'ai des problèmes avec un petit bout de code. En gros, mon code doit effectuer une recherche CLI de base dans un tableau d'entiers. Cependant, j'obtiens ce qui semble être une boucle infinie (BlueJ, le compilateur que j'utilise, se bloque et je dois réinitialiser la machine). J'ai défini des points d'arrêt mais je ne comprends toujours pas le problème... (Je ne comprends même pas la plupart des choses qu'il me dit).

Voici le code incriminé (supposez que "ArrayUtil" fonctionne, car c'est le cas) :

import java.util.Scanner;
public class intSearch
{
   public static void main(String[] args)
   {
       search();
   }

   public static void search()
   {
       int[] randomArray = ArrayUtil.randomIntArray(20, 100);
       Scanner searchInput = new Scanner(System.in);
       int searchInt = searchInput.nextInt();
       if (findNumber(randomArray, searchInt) == -1)
       {
           System.out.println("Error");
       }else System.out.println("Searched Number: " + findNumber(randomArray, searchInt));
   }

   private static int findNumber(int[] searchedArray, int searchTerm)
   {
      for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++)
      {
          return i;
      }
      return -1;
   }
}

Cela me dérange depuis un certain temps maintenant... aidez-moi à identifier le problème !

3voto

Mark Byers Points 318575

Je ne sais pas pour la boucle infinie mais le code suivant ne va pas fonctionner comme vous le souhaitiez. Le site i++ ne peut jamais être atteint, donc i aura toujours la valeur 0.

for (int i = 0; searchedArray[i] == searchTerm && i < searchedArray.length; i++)
{
    return i;
}
return -1;

Vous voulez probablement dire ceci :

for (int i = 0; i < searchedArray.length; i++)
{
    if (searchedArray[i] == searchTerm)
    {
        return i;
    }
}
return -1;

1voto

vodkhang Points 11222

Je ne sais pas ce qu'est la classe ArrayUtil (je ne peux pas l'importer avec mon Netbeans). Lorsque j'essaie de remplacer cette ligne par la ligne int[] randomArray = {1 , 2, 3, 5, 7, 10, 1 , 5} ; Cela fonctionne parfaitement.

Et vous devriez changer la condition de la boucle. Je ne vous dirai pas pourquoi mais essayez avec mon tableau et vous verrez le bug rapidement. Après l'avoir vu, vous pourrez le corriger :)

0voto

JDawson Points 1

Il y a 4 problèmes fondamentaux ici.
1. Mettez searchedArray[i] == searchTerm avant i < searchedArray.length peut entraîner une exception hors limites. Vous devez toujours empêcher ce type de code.
2. Votre intention semble être à l'opposé de votre code. Le nom de votre méthode implique de trouver un terme de recherche. Mais, votre code implique que vous voulez poursuivre l'analyse de votre boucle jusqu'à ce que le terme recherché ne soit pas trouvé, bien que votre boucle ne le fasse pas non plus. Pensez à "for ( ; this ;) { that } "comme "while this do that".
3. Placez un point de rupture au début de la "recherche". Ensuite, avec un petit tableau, parcourez le code ligne par ligne avec le débogueur et observez les variables. Elles ne mentent pas. Elles vous diront exactement ce qui se passe.
4. Veuillez utiliser un IDE et un compilateur standard, comme Eclipse et le JDK 6 ou 7 de Sun. Eclipse avec JDK 7 est une combinaison sérieuse qui ne présente pas une étrange "boucle infinie" comme vous le décrivez ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X