我遇到了一个问题。下面是我的代码,它要求用户输入并打印出用户一次输入一个单词的内容。
问题是这个程序永远不会结束,而且从我有限的理解来看,它似乎卡在while循环中了。有人能帮我一点忙吗?
import java.util.Scanner;
public class Test{
public static void main(String args[]){
System.out.print("Enter your sentence: ");
Scanner sc = new Scanner (System.in);
while (sc.hasNext() == true ) {
String s1 = sc.next();
System.out.println(s1);
}
System.out.println("The loop has been ended"); // This somehow never get printed.
}
}
9条答案
按热度按时间xwmevbvl1#
你不断地得到新的字符串,如果它不为空,就继续循环。简单地在循环中插入一个退出字符串的控件。
如果您希望在循环内声明字符串,并且在字符串为“exit”时不执行循环体中的操作:
iq0todco2#
Scanner
将继续读取,直到找到“文件结束”条件。当您从
stdin
阅读时,这将是当您发送一个EOF字符(通常是Unix上的^d
)时,或者如果您使用<
样式重定向,则是在文件的末尾。bvjveswy3#
当你使用scanner时,正如Alnitak所提到的,当你有一个EOF字符时,你只会得到'false'的hasNext(),基本上...你不能很容易地使用键盘发送一个EOF字符,因此在这种情况下,通常有一个特殊的字符或词,你可以发送来停止执行,例如:
休息会让你脱离这个圈子。
s4n0splo4#
您的条件是正确的(尽管您应该删除
== true
)。问题是扫描程序将继续运行,直到到达输入的末尾。请尝试Ctrl+D,或从文件(java myclass < input.txt
)中通过管道输入。ttisahbt5#
它不工作是因为你没有在代码中编程一个故障保护。java看到扫描器仍然可以收集输入,而有输入要收集,如果可能,而这是真的,它继续这样做。有一个扫描器测试,看看是否某个词,如退出,是好的,但你也可以让它循环一定的次数,比如10个左右。2但是最有效的方法是询问你的程序的用户他们希望输入多少字符串,当他们输入的字符串数小于他们输入的字符串数时,程序将执行。3一个附加的选项可以是如果他们键入EXIT,当他们发现他们需要的空间比他们输入的少,并且不想用空白来填充下一个单元格时。你可以让程序询问他们是否想输入更多的输入,以防他们意识到他们需要向计算机输入更多的数据。该程序制作起来会相当简单,也因为有很多方法你可以做到这一点。随时问我这些方法,我运行的空间虽然。XD
yrefmtwq6#
如果你不想使用EOF字符,你可以使用StringTokenizer:
wz8daaqr7#
我遇到了同样的问题,我通过使用一个scanner对象从控制台阅读整行,然后使用第二个scanner对象解析得到的字符串来解决这个问题。
qvsjd97n8#
你可以简单地使用一个依赖于系统的文件结束指示符(d代表Unix/Linux/Ubuntu,z代表windows)来使while语句为false,这会让你很好地退出循环。
dgiusagp9#
如下修改while循环,声明s1为String s1;一次在循环之外。要结束循环,只需使用ctrl+z。