Java - 超时(无限循环)错误

Java - TIMEOUT (Infinite loop) error

我们的讲师给我们介绍 JAVA class 的练习题之一是给我一个创建无限循环的错误。我想知道如何在没有此错误的情况下获得与我得到的相同的输出(测试输出显示在屏幕截图中)。

赋值说明如下:

编写一个名为 flipLines 的方法,该方法接受输入文件的 Scanner 作为其参数,并将相同文件的内容写入控制台,其中连续的行对顺序颠倒。程序应该以相反的顺序打印第一对行,然后以相反的顺序打印第二对,然后以相反的顺序打印第三对,依此类推。输入文件可以有奇数行,在这种情况下,最后一行打印在其原始位置。

此图片是错误的屏幕截图以及我在网站上的代码。

这是我的第一个 post 希望我的格式正确。

以防万一,这里是我的代码:

    public static void flipLines(Scanner input)  
    { 



    int x = 0;
    String evenLine = "";  
    String oddLine = "";  
    boolean value = true;

    while (value = true)
    {

        if (input.hasNextLine())
        {
            x++;

        }
        else
        {
            value = false;
        }
    }

    for (int i = 0; i < x; i++)
    {
        if (i < x && i % 2 == 0)
        {
            evenLine = input.nextLine();
            System.out.println(evenLine);            
        }
        else
        {
            continue;
        }

    }
    for (int j = 0; j < x; j++)
    {
        if (j < x && j % 2 != 0)
        {
            oddLine = input.nextLine();
            System.out.println(oddLine);
        }
        else
        {
            continue;
        }
    }
}

更改您的分配

while (value = true)

比较

while (value == true)

value = truetrue 赋值给 value 和 returns true,这意味着循环将永远不会结束。

编辑:

此外,input.hasNextLine() 将始终 return 为真,因为在 while 循环之前您不会阅读任何行,这就是该循环永远不会结束的原因。

如果不实际阅读行数,您将无法找到输入的行数。

您的 for 循环也没有执行您认为它们应该执行的操作。仅仅因为您跳过了 for 循环的迭代并不意味着您跳过了一行输入。

您需要的是在每次迭代中读取两行(假设有两行可用)并以相反顺序打印它们的单个循环。

String line1 = null;
while (input.hasNextLine()) {
    line1 = input.nextLine();
    if (input.hasNextLine()) {
        String line2 = input.nextLine();
        System.out.println(line2);
        System.out.println(line1);
        line1 = null;
    }
}
if (line1 != null)
    System.out.println(line1);