0

“||” 不起作用并在 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)
4

3 回答 3

3

|| 运算符是 or 运算符。当您的代码检查条件(inputfile.hasNext() || accCount <= 50)是否inputfile.hasNext()accCount<=50真时,循环将执行。这意味着,即使文件中没有任何内容要读取,如果您的accCount值小于或等于 50,那么代码将运行,然后在尝试读取不存在的行时抛出错误。

于 2019-06-26T02:25:16.023 回答
2

您的 while 循环检查两个条件:input.hasNext()accCount <= 50. 如果您查看堆栈跟踪,不仅代码的第 67 行抛出了异常,而且异常来自 Scanner 类本身。

查看文档,我们可以看出当输入用尽时会抛出 NoSuchElementException。这告诉我您对 Scanner 类的使用有问题。结果是'||' input.hasNext()or 运算符,当or中的至少一个accCount <= 50为真时,循环前进——因此,当没有更多输入 BUTaccCount <= 50时,您将尝试在第 67 行读取下一个 int 并且 Scanner 将抛出异常,就像现在一样. 使用&&可以避免这种情况,因为 nowinput.hasNext()accCount <= 50两者都必须为真——也就是说,必须有一个有效的即将到来的输入和一个有效的帐号。那有意义吗?

于 2019-06-26T02:27:23.623 回答
0

&& :它将检查,如果两个条件都满足,那么只有该块将执行。

|| :它将检查第一个条件,如果满足则执行该块。如果第一个条件失败,它将检查第二个条件。

  • 如果您看到错误,则它位于第 1 行。67 即“在 java.util.Scanner.nextInt(未知来源)”。
  • 所以这仅仅意味着在你的条件下,第一个条件失败并且第二个条件得到满足,因为你的块被执行了。而且由于您的 Scanner 没有下一个元素,因此如果调用 nextInt() 方法也失败。
于 2019-06-26T06:15:32.700 回答