“ ||”不起作用,并在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)
答案 0 :(得分:3)
|| operator是or运算符。当您的代码检查条件(inputfile.hasNext() || accCount <= 50)
是inputfile.hasNext()
还是accCount<=50
为真时,将执行循环。因此,即使文件中没有任何内容可供读取,如果您的accCount
小于或等于50,则代码将运行并在尝试读取不存在的行时引发错误。 。
答案 1 :(得分:2)
您的while循环检查两个条件:input.hasNext()
和accCount <= 50
。如果查看堆栈跟踪,不仅从代码的第67行引发异常,而且该异常来自Scanner类本身。
看the documentation,我们可以知道输入耗尽时会引发NoSuchElementException。这告诉我,您对Scanner类的使用与某些情况有关。结果是“ ||”或运算符,当input.hasNext()
或accCount <= 50
中的至少一个为true时,循环前进-因此,当没有更多输入但accCount <= 50
时,您将尝试读取下一个int第67行,扫描程序将抛出异常,就像现在所做的那样。使用&&
可以避免这种情况,因为现在input.hasNext()
和accCount <= 50
都必须为真-也就是说,必须有有效的即将到来的输入和有效的帐号。这有道理吗?
答案 2 :(得分:0)
&&:它将检查是否同时满足两个条件,则仅执行该块。
|| :它将检查第一个条件,如果满足则执行该程序段。 如果第一个条件失败,它将检查第二个条件。