我是一名新手计算机科学高中生,我遇到一小段代码问题。基本上,我的代码应该在整数数组中执行基本的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;
}
}
这已经困扰了我一段时间了......请帮我找出问题所在!
答案 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是一个严重的组合,不会出现如上所述的奇怪的“无限循环”。