gpt4 book ai didi

Java Scanner.next() 或方法调用

转载 作者:行者123 更新时间:2023-11-30 04:05:33 25 4
gpt4 key购买 nike

我正在编写一个程序,它接受输入并在单词列表中搜索其任何字谜词。为此,它调用一个 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,并且代码会像以前一样卡住!

编辑:这是搜索方法。 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));
}

最佳答案

其实,事情一清二楚。您不需要调试器来查找无限循环。

以下是关键代码:

  int[] inputLetters = new int[25];
int[] wordLetters = new int[25];

while(entries < anagrams.length)
{
....

if(inputLetters == wordLetters)
{
......
entries++;
}
}
}

分析:

  1. 只要 entries(最初为 0)小于 anagrams.length,就会循环;
  2. 如果 inputLetters == wordLetters,则增加 entries
  3. 但显然,inputLetters 引用永远不能等于 wordLetters 引用。每个都引用自己的数组;
  4. 因此您无法增加条目
  5. 因此你会陷入无限循环。

关于Java Scanner.next() 或方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com