java为什么这个while循环使用“and”操作符而不是“or”?
“| |”不起作用,并在while循环中给出错误消息。“&;&;”这正是我所需要的,但我很好奇为什么它只能这样工作
这是学校的家庭作业项目&&;工作正常,没有错误信息。我还尝试过将单个表达式括起来,并将其切换,但都没有效果
//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)
# 1 楼答案
while循环检查两个条件:
input.hasNext()
和accCount <= 50
。如果查看堆栈跟踪,不仅是代码第67行引发的异常,而且该异常来自Scanner类本身看看the documentation,我们可以看出,当输入耗尽时,会抛出NoTouchElementException。这告诉我你对Scanner类的使用有问题。事实证明,使用“||”or运算符,当
input.hasNext()
或accCount <= 50
中至少有一个为真时,循环将前进——因此,当不再有输入,而是accCount <= 50
时,您将尝试读取第67行的下一个int,扫描仪将抛出异常,就像现在一样。使用&&
可以避免这种情况,因为现在input.hasNext()
和accCount <= 50
都必须是真的——也就是说,必须有有效的即将到来的输入和有效的帐号。这有意义吗# 2 楼答案
&&;:它将检查,如果两个条件都满足,则只执行该块
| |:它将检查第一个条件,如果满足,则将执行块。 如果第一个条件失败,它将检查第二个条件
# 3 楼答案
| |运算符是or运算符。当代码检查条件
(inputfile.hasNext() || accCount <= 50)
时,如果inputfile.hasNext()
或accCount<=50
为真,则将执行循环。这意味着,即使文件中没有任何内容可供读取,如果accCount
小于或等于50,那么代码将运行,然后在尝试读取不存在的行时抛出错误