为什么这个 while 循环使用 "and" 运算符而不是 "or"?
Why does this while loop work with "and" operator and not with "or"?
“||”不起作用,并在 while 循环中给出错误消息。 "&&" 可以,这就是我所需要的,但我很好奇为什么它只能那样工作。
这是学校的家庭作业项目。 && 工作得很好,没有给出错误信息。我也试过将各个表达式括起来并切换它们,none 其中有效。
//Below is line 29 in main calling the function
accCount = readAccts(acctNum, balance, MAX_NUM, inputfile);
//actual function attempting to read in data to an array
public static int readAccts(int[] acctNum, double[] balance,
int MaxAccts, Scanner inputfile)
{
int accCount = 0;
//loop inputs account number and balance into array
while(inputfile.hasNext() || accCount <= 50) {
//Line below is line 67 mentioned in error message
acctNum[accCount] = inputfile.nextInt();
balance[accCount] = inputfile.nextDouble();
accCount++;
}
我在使用“||”时收到编译错误消息:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at bankAccount.readAccts(bankAccount.java:67)
at bankAccount.main(bankAccount.java:29)
||运算符是或运算符。当您的代码检查条件 (inputfile.hasNext() || accCount <= 50)
如果 inputfile.hasNext()
或 accCount<=50
为真时,循环将执行。所以这意味着,即使文件中没有任何内容可读,如果您的 accCount
小于或等于 50,那么代码将 运行 然后在尝试读取时抛出错误一条不存在的线路。
您的 while 循环检查两个条件:input.hasNext()
和 accCount <= 50
。如果查看堆栈跟踪,不仅从代码的第 67 行抛出异常,而且异常来自 Scanner class 本身。
查看 the documentation,我们可以看出当输入耗尽时会抛出 NoSuchElementException。这告诉我您对扫描仪 class 的使用有问题。结果是'||'或运算符,当 input.hasNext()
或 accCount <= 50
中至少有一个为真时,循环会继续——因此当没有更多输入但 accCount <= 50
时,您将尝试读取下一个 int第 67 行,扫描仪将抛出异常,就像现在一样。使用 &&
可以避免这种情况,因为现在 input.hasNext()
和 accCount <= 50
都必须为真——也就是说,必须有有效的即将输入和有效的帐号。这有意义吗?
&& :它会检查,如果两个条件都满足,那么只有那个块会被执行。
|| :它将检查第一个条件,如果满足则执行该块。
如果第一个条件失败,它将检查第二个条件。
- 如果您看到错误,它位于第 3 行。 67 即“在
java.util.Scanner.nextInt(来源不明)"。
- 所以这仅仅意味着在你的条件下,第一个条件失败了
第二个得到了满足,因为你的块被执行了。由于您的 Scanner 没有下一个元素,如果调用 nextInt() 方法也失败。
“||”不起作用,并在 while 循环中给出错误消息。 "&&" 可以,这就是我所需要的,但我很好奇为什么它只能那样工作。
这是学校的家庭作业项目。 && 工作得很好,没有给出错误信息。我也试过将各个表达式括起来并切换它们,none 其中有效。
//Below is line 29 in main calling the function
accCount = readAccts(acctNum, balance, MAX_NUM, inputfile);
//actual function attempting to read in data to an array
public static int readAccts(int[] acctNum, double[] balance,
int MaxAccts, Scanner inputfile)
{
int accCount = 0;
//loop inputs account number and balance into array
while(inputfile.hasNext() || accCount <= 50) {
//Line below is line 67 mentioned in error message
acctNum[accCount] = inputfile.nextInt();
balance[accCount] = inputfile.nextDouble();
accCount++;
}
我在使用“||”时收到编译错误消息:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at bankAccount.readAccts(bankAccount.java:67)
at bankAccount.main(bankAccount.java:29)
||运算符是或运算符。当您的代码检查条件 (inputfile.hasNext() || accCount <= 50)
如果 inputfile.hasNext()
或 accCount<=50
为真时,循环将执行。所以这意味着,即使文件中没有任何内容可读,如果您的 accCount
小于或等于 50,那么代码将 运行 然后在尝试读取时抛出错误一条不存在的线路。
您的 while 循环检查两个条件:input.hasNext()
和 accCount <= 50
。如果查看堆栈跟踪,不仅从代码的第 67 行抛出异常,而且异常来自 Scanner class 本身。
查看 the documentation,我们可以看出当输入耗尽时会抛出 NoSuchElementException。这告诉我您对扫描仪 class 的使用有问题。结果是'||'或运算符,当 input.hasNext()
或 accCount <= 50
中至少有一个为真时,循环会继续——因此当没有更多输入但 accCount <= 50
时,您将尝试读取下一个 int第 67 行,扫描仪将抛出异常,就像现在一样。使用 &&
可以避免这种情况,因为现在 input.hasNext()
和 accCount <= 50
都必须为真——也就是说,必须有有效的即将输入和有效的帐号。这有意义吗?
&& :它会检查,如果两个条件都满足,那么只有那个块会被执行。
|| :它将检查第一个条件,如果满足则执行该块。 如果第一个条件失败,它将检查第二个条件。
- 如果您看到错误,它位于第 3 行。 67 即“在 java.util.Scanner.nextInt(来源不明)"。
- 所以这仅仅意味着在你的条件下,第一个条件失败了 第二个得到了满足,因为你的块被执行了。由于您的 Scanner 没有下一个元素,如果调用 nextInt() 方法也失败。