【发布时间】:2021-03-11 01:25:35
【问题描述】:
好的,所以我在 Java 中遇到了这个奇怪的故障,我已经解决了这个问题,但我不明白为什么会出现这个问题。所以我有一个while循环,循环一直在等待我的字符串变量“input”发生变化,当按下回车键时输入会发生变化。当布尔值“等待”为真时,while 循环继续循环。所以 while 循环不断循环,其中有一个 if-else 语句,if 语句说如果“输入”仍然是“”,那么“等待”继续等于真。否则,等待 = 假。但是,当这是循环时,我可以在输入将读取的字段中输入文本并按 Enter,但是当我执行任何操作时,什么也没有发生。除非我的 while 循环中有其他代码。任何其他似乎以某种方式输出文本的代码都可以解决这个问题,我不明白为什么。我将展示非工作代码和工作代码示例。
不工作
boolean waiting = true;
while(waiting)
{
if(input.equals(""))
waiting = true;
else
waiting = false;
//System.out.println("waiting");
}
工作
boolean waiting = true;
while(waiting)
{
if(input.equals(""))
waiting = true;
else
waiting = false;
System.out.println("waiting");
}
我不明白为什么这解决了这个问题,它没有给程序增加任何功能,我只是用它来查看循环是否正在循环,突然整个问题消失了,为什么要解决这个问题?
【问题讨论】:
-
尝试在你的 if else, if(condition){code}else{morecode} 上放置块
-
没有足够的上下文来回答。什么是
input,是怎么声明的?写什么?这可能来自线程饥饿;第一个不工作的繁忙循环无所事事,任何写到input的东西都没有机会运行——但是第二个写输出,这可以使线程屈服,另一个线程有机会改变输入。尝试将您的 println 替换为Thread.currentThread().yield(); -
没有什么可修复的。假设
input变量为空(Null 字符串),代码可以正常工作。同样,这是假设,因为您没有提供关于input的用途或填充方式的任何线索。两个代码版本都做同样的事情。 -
@StephenP 你所说的有效,我发布了一个答案,它还为代码提供了更多上下文,非常感谢。
标签: java loops while-loop