当所有行都被读完时,我试图突破循环。我已经尝试使用String temp = scan.nextLine
,if temp.equals("") break
,但这并没有在正确的时间突破循环。
我希望它一直读到文件末尾,然后退出循环,除了while scan.hasNextLine()
在读取文件中的最后一个值时仍然评估为true。
代码:
int line = 0;
while (scan.hasNextLine()) {
System.out.println("reading first line");
//means we're reading the board coordinates
if (line == 0) {
System.out.println("first line");
boardX = scan.nextInt();
System.out.println("boardX: " + boardX);
boardY = scan.nextInt();
System.out.println("boardY: " + boardY);
}
//we're reading the non smokers positions and storing them in an array
int nonSmokersPosX;
int nonSmokersPosY;
nonSmokersPosX = scan.nextInt();
nonSmokersPosY = scan.nextInt();
System.out.println("non smokers position: " + nonSmokersPosX + " " + nonSmokersPosY);
pairedCoordinates.add(new Pair(nonSmokersPosX, nonSmokersPosY));
line++;
}
输入:
9 8
0 1
5 6
3 2
输出:
reading first line
first line
boardX: 9
boardY: 8
non smokers position: 0 1
reading first line
non smokers position: 5 6
reading first line
non smokers position: 3 2
reading first line
Exception in thread "main" java.util.NoSuchElementException
答案 0 :(得分:2)
您可以使用使用hasNext()
函数的while循环。像这样:
while(scan.hasNextLine()) {...}
此外,您可以检查您正在阅读的文本文件是否在末尾没有多余的行。您也可以尝试.hasNext()
答案 1 :(得分:1)
有两种解决方案。您希望在while
条件下检查什么;是否至少还有一个或多一行?
然后检查是否至少还有一个号码:while (scan.hasNextInt()) {
然后确保首先完全读取当前行。扫描仪必须先超过当前行的末尾才能确定是否有更多行。
因此,作为while
循环中的最后一条语句,请添加:scan.nextLine();
这两种解决方案都可以使您的代码正常运行。
答案 2 :(得分:0)
您的while循环已经具有以下条件:while (scan.hasNextLine())
。这意味着继续前进,直到我们有下一行,如果我们不退出循环。
答案 3 :(得分:0)
此外,您可能希望清理代码。您的打印步骤不正确,并且不遵循程序的逻辑。
int line = 0;
while (scan.hasNextLine()){
System.out.println("reading first line");
//means we're reading the board coordinates
if (line == 0){
System.out.println("first line");
boardX = scan.nextInt();
System.out.println("boardX: "+boardX);
boardY = scan.nextInt();
System.out.println("boardY: "+boardY);
} else {
//we're reading the non smokers positions and storing them in an array
int nonSmokersPosX;
int nonSmokersPosY;
nonSmokersPosX = scan.nextInt(); // <-- This is where your code was previously failing.
nonSmokersPosY = scan.nextInt();
System.out.println("non smokers position: "+nonSmokersPosX+" "+nonSmokersPosY);
pairedCoordinates.add(new Pair(nonSmokersPosX, nonSmokersPosY));
}
line++;
}
答案 4 :(得分:0)
您告诉我们您的输入是:
9 8
0 1
5 6
3 2
我问,你的EOF在哪里?当我过去对这些作业进行评分时,如果您的最后一行数据以EOF或其他新行结尾,那么会产生重大影响。
怎么说?打开输入文件并运行闪烁的光标(有些人称之为插入符号)到最后。它是停在2的右边还是3的下方?
一旦你知道这个并不难编程,但是当你不这样做时调试就会令人抓狂。希望它有所帮助。