[英]Java while(input.hasnextline) loop not exiting?
所以我應該確定文本文件中的行數(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++;
}
您永遠不會在第一個循環中消耗您的輸入,只需使用input.nextLine()
。
現在,您一直循環執行,直到input.hasNextLine()
變為false,但這永遠不會發生,因為您不會消耗輸入。
使用input.next()移至下一行。 在While條件中,您檢查的是下一行,而不是null。 多數民眾贊成在無限循環中。
在下面的代碼中,這是初始化
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++;
}
在我看來,您可以使用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()
方法。
為了即使在消耗了必需的輸入后也可以停止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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.