gpt4 book ai didi

java - .hasNext() 和 .next() 导致无限 while 循环

转载 作者:行者123 更新时间:2023-12-02 11:17:17 25 4
gpt4 key购买 nike

我正在参加初级编码类(class),这是我的作业: 编写一个名为 palindromeCheck 的 void 方法,该方法不带任何参数。该方法应该具有检查单词是否是回文并将所有回文打印到屏幕上的功能,每行一个。此外,输出的最后一行应包含消息:“There are x palindromes out of y Words generated by user”(其中 x 是检测到的回文单词数,y 是用户输入的单词总数)。提示:对于本实验练习,您将需要 String 对象的以下方法:length() 给出字符串的长度(即它包含的字符数),charAt(i) - 给出位置 i 处的字符。 由于输入的输入应该由空格分隔,因此我对如何创建迭代每个输入的单词的 while 循环感到困惑。我的教授以她希望我们创建的方法的框架的形式为我们提供了帮助。该框架中有一个 while 循环,它对输入的每个单词执行操作

while (keyboard.hasNext()){
someWord = keyboard.next();
// some code that performs actions
}

这个 while 循环可以工作,但在完成并应该终止后,它只会提示输入更多输入。下面是我当前的代码,除了这个逻辑错误之外,应该完成它。

public static void palindromeCheck(){
String someWord = ""; // Stores words read from user input
int count = 0; // keeps track of Palindrome words only
int total = 0; // Counts the total number of lines read from the given text file
int score = 0; // used as a condition to count palindrome words
System.out.println("Enter some words separated by white space.");
Scanner keyboard = new Scanner(System.in);

while (keyboard.hasNext()) { // for each word user enters
someWord = keyboard.next(); // store each word in a string variable and then do operations
score = 0;
int n = (someWord.length()-1);
for (int i = 0; i < (someWord.length()-2); i++){
for (int j = (someWord.length()-1); i < (someWord.length()-2); j--){
j = n;
n--;
if(someWord.charAt(i) == someWord.charAt(j)){
break;
}
else
score++;
}
}
if(score == 0){ // if word is palindrome adds to counter
count++;
}
total++; // increment number of words as you read each one
//System.out.println(" " + total + " " + someWord); // test
}
System.out.println("There are " + count + " palindromes out of " + total + " words provided by user.");
}

最佳答案

您不能依赖 keyboard.hasNext() 来告诉您程序何时应该停止。键盘基本上是无限的输入源,因此 keyboard.hasNext() 可能永远返回false。如果上一个输入行中有一些数据尚未处理,它将立即返回true。但是,如果前一行的所有数据都用完,keyboard.hasNext() 将只是等待您输入另一行,然后在您输入后返回 true已按 ENTER 键。

由于您不能依赖 keyboard.hasNext() 来告诉您是时候停止处理单词了,因此您必须编写其他方法来决定程序何时应该停止。

从用户的角度来看,最好的方法是读取一整行输入,处理该行上的所有单词,然后停止。您使用keyboard.nextLine()读取整行输入:

String inputLine = keyboard.nextLine();

之后,您可以选择如何将该行分解为单独的单词。以下是两种方法的示例。

使用扫描仪(字符串):

String inputLine = keyboard.nextLine();
Scanner wordScn = new Scanner(inputLine);
while (wordScn.hasNext())
{
String someWord = wordScn.next();
// ... process someWord
}

使用String.split(String delimRegEx):

String inputLine = keyboard.nextLine();
String[] words = inputLine.split("\\s+");
for (String someWord : words)
{
// ... process someWord
}

split"\\s+" 参数是一个正则表达式,它指定单词之间的分隔符,意思是“空格 ( \s)、(+) 中的一个或多个。

关于java - .hasNext() 和 .next() 导致无限 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50184143/

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