簡體   English   中英

Java while(input.hasnextline)循環不退出嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM