我正在编写一个程序,它接受一个输入并搜索一个单词列表中的任何一个字谜。为此,它调用一个void方法search
来打印10个字谜。以下是导致我麻烦的代码段:
public static void main(String[] args) throws Exception
{
Scanner input = new Scanner(System.in);
System.out.println("Please enter a word: ");
String word = input.next();
System.out.println(word);
search(word);
}
这总是打印出你输入的任何单词,但随后它就会停止。当我在jGRASP中使用调试器时,我注意到它甚至没有为word
保存任何值!它也从不调用search
类。代码冻结 - 它说它仍然在运行,但它没有做任何事情。但是,如果我让用户在单词后输入一个整数值,如下所示:
Scanner input = new Scanner(System.in);
System.out.println("Please enter a word: ");
String word = input.next();
System.out.println(word);
System.out.println("Enter a number: ");
int example = input.nextInt();
search(word);
这会将值保存到word
,但不会保存example
,并且代码会像以前一样冻结!
编辑:这是search
方法。 words.txt是同一文件夹中的单词列表。
public static void search(String input) throws Exception
{
Scanner words = new Scanner(new File("words.txt"));
char[] alphabet = new char[] {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'};
int[] inputLetters = new int[25];
int[] wordLetters = new int[25];
String[] anagrams = new String[10];
int entries = 0;
for(int a = 0; a < input.length(); a++)
{
for(int b = 0; b <= 25; b++)
{
if(input.charAt(a) == alphabet[b])
{
inputLetters[b]++;
}
}
}
while(entries < anagrams.length)
{
while(words.hasNext())
{
String comparison = words.next();
for(int a = 0; a < comparison.length(); a++)
{
for(int b = 0; b < 25; b++)
{
if(comparison.charAt(a) == alphabet[b])
{
wordLetters[b]++;
}
}
}
if(inputLetters == wordLetters)
{
anagrams[entries] = comparison;
entries++;
}
}
}
System.out.println(Arrays.toString(anagrams));
}
答案 0 :(得分:2)
实际上,这一天很明显。您不需要调试器来查找无限循环。
以下是代码的关键部分:
int[] inputLetters = new int[25];
int[] wordLetters = new int[25];
while(entries < anagrams.length)
{
....
if(inputLetters == wordLetters)
{
......
entries++;
}
}
}
分析:
entries
(最初为0)小于anagrams.length
,就会循环播放; entries
; inputLetters == wordLetters
inputLetters
引用永远不能等于wordLetters
引用。每个都引用自己的数组; entries
;