非常简单的数字搜索代码给了我无限循环

时间:2010-05-22 13:21:07

标签: java

我是一名新手计算机科学高中生,我遇到一小段代码问题。基本上,我的代码应该在整数数组中执行基本的CLI搜索。然而,发生的事情是我得到的似乎是无限循环(BlueJ,我正在使用的编译器,卡住了,我必须重置机器)。我设定了断点,但我仍然没有解决问题...(我甚至不理解它告诉我的大部分事情)

这是违规代码(假设“ArrayUtil”有效,因为它确实如此):

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;
   }
}

这已经困扰了我一段时间了......请帮我找出问题所在!

3 个答案:

答案 0 :(得分:3)

我不知道无限循环,但以下代码无法按预期工作。永远无法访问i++,因此i的值始终为0。

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

你可能是这个意思:

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

答案 1 :(得分:1)

我不知道什么是类ArrayUtil(我无法导入使用我的Netbeans)。当我尝试用行int [] randomArray = {1,2,3,5,7,10,1,5}来改变那一行时;它运作得很好。

你应该改变循环条件。我不会告诉你原因,但尝试使用我的阵列,你很快就会看到这个bug。看到之后,你可以解决它:)

答案 2 :(得分:0)

这里有4个基本问题。
1.在searchedArray[i] == searchTerm之前放置i < searchedArray.length可能会导致越界异常。您必须始终阻止这种代码。
你的意图似乎与你的代码相反。您的方法名称意味着查找搜索词。但是,您的代码意味着您希望继续循环扫描,直到找不到搜索项,尽管您的循环也不会这样做。把“for(; this;){that}”想象成“当这样做”。
3.在“搜索”的开头放置一个断点。然后,使用一个小数组,逐行逐步调试代码并观察变量。他们不撒谎。他们会告诉你到底发生了什么。
4.请使用标准的IDE和编译器,例如Eclipse和Sun的JDK 6或7.带有JDK 7的Eclipse是一个严重的组合,不会出现如上所述的奇怪的“无限循环”。