所以我应该确定文本文件中的行数(包含数字的100行),然后创建一个包含行数的数组,但第一个while循环用于查找行数在文本文件中永远不会退出。第二个循环是完全相同的一个工作得很好。请帮帮我!
static void main(String[] args) throws Exception{
java.io.File file = new java.io.File("seriesOfNumbers.txt"); //file instance
Scanner input = new Scanner(file); //Scanner
int M =0 ;
while (input.hasNextLine() && !input.equals(null))// ** Loop never exits, tried almost everything
{
k++;
}
double[] numberArray = new double[k];
int V = 0;
while (input.hasNextLine())// When I exit the first loop this one exits just fine
{
numberArray[j] = (double) input.nextInt();
j++;
}
答案 0 :(得分:1)
您永远不会在第一个循环中消耗您的输入,使用input.nextLine()
执行此操作。
您现在正在循环,直到input.hasNextLine()
变为false,但这种情况从未发生过,因为您没有使用输入。
答案 1 :(得分:0)
使用input.next()移动到下一行。在While条件下,您正在检查下一行,而不是null。那是它在无限循环中。
答案 2 :(得分:0)
在下面的代码中, 这是初始化
Scanner input = new Scanner(file); //Scanner
这是正在阅读
int M =0 ;
while (input.hasNextLine() && !input.equals(null))
{
input.nextLine(); // Use this to advance the lines from scanner
k++;
}
答案 3 :(得分:0)
在我看来,您可以使用apache.commons.io项目中的FileUtils类来完成这项工作。
static void main(String[] args) throws Exception{
List<String> lines = FileUtils.readLines(new File("..."));
现在,如果你真的需要numberArray进行其他计算,你可以
double[] d = new double[lines.size()];
或者您可以使用Collection来迭代
for (String line : lines) {
double n = Double.parseDouble(line);
要使用FileUtils,请查看http://commons.apache.org/proper/commons-io/
但是,你想要的只是知道你的代码有什么问题,你应该在你的第一个while循环中调用方法Scanner.nextLine()
。
答案 4 :(得分:0)
为了即使在消耗了必需的输入之后也可以停止while循环的无限循环,我们可以使用break
语句。
这里是一个例子,
while (scanner.hasNextLine()) {
String[] arr = scanner.nextLine().split(" ");
long[] ar = new long[n];
for (int i = 0; i < n; i++) {
ar[i] = Long.parseLong(arr[i]);
}
long result = sum(ar);
System.out.println(result);
break;
}