[英]While-loop in Java not working
好了,所以问题是这样的:
我想输入一堆数字,一个随机数,例如5个数字。 在该数字的末尾,我将添加第六个数字0,这将是循环结束的信号。
为此,我将要做。
我运行我的程序,这是我的输入:
1 3 4 2 5 0
所以我要打印程序
1 3 4 2 5“序列结束”
这是我的代码,据说可以做到这一点(所有这些都在main方法中):
Scanner input = new Scanner(System.in);
System.out.println("Alright, what?");
boolean notZero = true;
while (notZero)
{
System.out.println(input.nextInt());
if (input.nextInt() == 0)
System.out.println("End of sequence");
notZero = false;
}
这些是我得到的结果:
有趣的是,如果我没有while循环停止,然后再次输入相同的数字列表(1 3 4 2 5 0),它将输出3和2,这是我的数字列表中的偶数-以及所有这进一步困扰了我。
有任何想法吗?
将所有块包装起来,包括如果将块装在花括号中!
这个:
if (foo)
doSomething();
doSomethingElse();
不能像您认为的那样工作
if (foo) {
doSomething();
}
doSomethingElse();
而是将所有块用大括号括起来,以便毫无疑问:
if (foo) {
doSomething();
doSomethingElse();
}
这看起来像是一项学习练习,所以我会给您一些提示,而不是直接告诉您。
在您选择的IDE中,告诉它自动缩进您的代码。 仔细查看if
语句及其结果的位置。
请仔细考虑nextInt()的功能,以及在何处以及多久调用一次。
您在循环中两次调用input.nextInt(),仅打印其中之一。 实际上,这就像跳过输入中的所有其他数字。 更改您的代码以将下一个输入存储到变量中,然后检查该变量。 我怀疑这不是您的实际代码,因为没有通过检查条件将notZero
设置为false
,它只会执行一次循环。 FWIW, notZero
是一个糟糕的变量名。 它应该是语义的,而不是指示其期望值。 您还希望仅在输入值不是输入指示符的结尾时打印输入值。
Scanner input = new Scanner(System.in);
System.out.println("Alright, what?");
boolean endOfInput = false;
while (!endOfInput) {
int next = input.nextInt();
if (next == 0) {
System.out.println("End of sequence");
endOfInput = true;
}
else {
System.out.println(next);
}
}
您的问题在这里:
if (input.nextInt() == 0)
当您调用nextInt()两次时,它将删除两个数字。 您只需要在每个迭代中调用一次即可。
while (notZero)
{
int num = input.nextInt();
System.out.println(num);
if (num == 0) {
System.out.println("End of sequence");
notZero = false;
}
}
解决此问题以及气垫船充满鳗鱼指出的问题,你应该很好。
您在整个循环中每次都要调用nextInt()
两次。 这意味着您每次都会消耗两个数字,每个数字都会做不同的事情-即,打印的数字和与0比较的数字是两个不同的数字。 您只需要调用一次nextInt()
并将结果存储在变量中, 然后对其进行操作。
除了循环中的两次读取外,我假设您还想在if语句后添加一个块
if (input.nextInt() == 0) {
System.out.println("End of sequence");
notZero = false;
}
据我notZero
, notZero
的唯一目的是终止循环。 如果使用以循环条件终止的循环,则不需要它。 您也不需要在循环内打印“序列结束”,因为根据定义,它会在序列结束时打印。
如果我们直接测试条件,
int n;
while ((n = input.nextInt()) != 0)
{
System.out.println(n);
}
System.out.println("End of sequence");
您也可以说for (int n = input.nextInt(); n != 0; n = input.nextInt())
而不是while
。 它确保n
仅在循环中可见,但这也意味着重复自己-并可能使某人稍后使两个“初始化”和“增量”部分不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.