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 = true
将 true
赋值给 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);
我们的讲师给我们介绍 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 = true
将 true
赋值给 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);