我试图让用户询问他们文件的名称,然后我将扫描文件以查看文件中有多少索引,然后将其放入数组并从那里开始。
这是我的代码:
import java.util.*;
import java.io.*;
public class TestScoresAndSummaryStatistics {
public static void main(String[] args) throws IOException {
int scores;
int indices = -1;
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter the name of the file");
String fileName = keyboard.next();
//I believe something is wrong here, am I incorrectly bring inputFile into new File?
File inputFile = new File(fileName);
Scanner data = new Scanner(inputFile);
while (data.hasNext()) {
indices++;
}
System.out.println("There are: " + indices + "indices.");
}
}
我认为= new File(filename);
部分出了问题:也许是因为我没有引号,但我不确定。我该如何解决这个问题?
答案 0 :(得分:0)
您只检查Scanner
中是否有数据,但您从不使用它。
java.util.Scanner.hasNext()方法如果此扫描器的输入中有另一个标记,则返回true。在等待输入扫描时,此方法可能会阻塞。扫描仪不会超过任何输入。
如果文件中有任何数据,下面的代码将永远不会结束,无需读取数据即可增加计数器。
while (data.hasNext()) {
indices++;
}
答案 1 :(得分:0)
更改
while (data.hasNext()) {
indices++;
}
到
while (data.hasNext()) {
indices++;
data.next();
}
您想为每一行增加indices
。为此,您应该转到下一行并检查是否有其他可用行。 问:你怎么去下一行? A: data.next();
E.g。 - file.txt:
您的方法 - 不好:
第1步
line a <--- here you are
line b
line c
第2步
line a <--- here you are
line b
line c
...
data.hasNext()
将永远属实,因为您将在每一步的第一行=&gt;无限循环
正确的方法:
第1步
line a <--- here you are
line b
line c
第2步
line a
line b <--- here you are
line c
第3步
line a
line b
line c <--- here you are
在这种情况下,data.hasNext()
只会返回true
3次,然后会返回false
(该文件在第3行之后没有任何行)