【问题标题】:Line Not Found on while loop?在while循环中找不到行?
【发布时间】:2014-01-27 22:25:58
【问题描述】:

我一直试图让它工作一段时间。我正在放入三个平行的空数组,它错误地说没有找到线。它仅在我将 while 语句更改为元素数时才有效。我正在尝试制作大小为 15 的数组,但只填充前十个数组部分。

对不起,如果听起来很复杂,但基本上我想说数组的大小是 15,我只有 10 个东西要输入数组,其余的应该是空白的。

while (text.hasNext() && c < nameArray.length) {
        nameArray[count] = text.nextLine();
        intArray[count] = text.nextDouble();
        doubleArray[count] = text.nextInt();
        text.nextLine();
        c++;
    }

这不起作用。

while (text.hasNext() && c < 9) {
        nameArray[count] = text.nextLine();
        intArray[count] = text.nextDouble();
        doubleArray[count] = text.nextInt();
        text.nextLine();
        c++;
    }

确实如此。

【问题讨论】:

  • gameArray.length的值究竟是什么?
  • 所有长度都等于15。
  • 听起来像是“Off By One”错误。请务必注意,长度为 15 的数组的最高索引为 14。
  • 调试它并找出发生这种情况的迭代。
  • @ShaneHart 很高兴听到您解决了这个问题。不必编辑问题以说它已解决;将答案标记为已接受将其标记为这样

标签: java arrays loops while-loop


【解决方案1】:

您在一个循环中两次读取文件。删除第二个阅读: fileText.nextLine();

【讨论】:

    【解决方案2】:

    当然不行。如果你需要在 fileText 长度和 gameArray 长度之间循环到最大值,你应该使用 or 代替 and 并在循环中使用 if。

    试试这样的:

    while (fileText.hasNext() || count < gameArray.length) {
            if (!fileText.hasNext()) {
               gameArray[count] = "";
               priceArray[count] = 0;
               stockArray[count] = 0;
            } else {
               gameArray[count] = fileText.nextLine();
               priceArray[count] = fileText.nextDouble();
               stockArray[count] = fileText.nextInt();
               fileText.nextLine();
            }
            count++;
    }
    

    【讨论】:

      【解决方案3】:

      您的问题不在于数组的长度,而在于fileTest.nextLine()。在某一点之后,没有可用的nextLine()。它适用于第 1 次 9 次,但我想在您到达 array.length 之前所有线路都已用尽。我会在你的 while 循环中建议一个条件:

      while(fileText.hasNext()) {
      }
      

      这样您将只填写实际存在的金额。

      【讨论】:

        【解决方案4】:

        使用第二个 fileText.nextLine() 添加另一个检查以确保有一行要读取。

        while (fileText.hasNext() && count < gameArray.length) {
            gameArray[count] = fileText.nextLine();
            priceArray[count] = fileText.nextDouble();
            stockArray[count] = fileText.nextInt();
            if ( fileText.hasNext() )
                fileText.nextLine();
            count++;
        }
        

        【讨论】:

        • 这很好用。我明白我做错了什么。非常感谢您的帮助!
        • 这是不正确的。是的,您将避免异常。但是您只会阅读每第二行。例如。如果有 10 行,您将只填充数组中的 5 个元素。 @Shane Hart:打印出数组并检查:您只有第二行,而不是全部。
        • @mentallurg - 如果您查看 OP,您会看到第二段代码“有效”(我将其解释为“正常工作”)。由于 OP 不包含示例输入文件,我只能假设每隔一行都是空白的,并且打算跳过行。如果不是,那么请务必删除第二个readLine(),但我不会再猜测 OP 的输入是什么。
        • @MT0:不,id 不起作用。正如我所说,也不例外。但是每第二行都会被跳过。 “Shane Hart”希望每行都被阅读。所以你的代码不会工作。
        【解决方案5】:

        在您的代码的第一个版本中,您尝试读取输入 15 次,但只输入了 10 次。所以扫描器尝试读取一个新行但它不存在。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-12
          • 1970-01-01
          • 1970-01-01
          • 2016-11-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-24
          相关资源
          最近更新 更多