簡體   English   中英

將文件中的名稱放入數組會導致無限循環

[英]Putting names from a file into an array is causing an infinite loop

我有一個文本文件“名稱”,其中包含10個名稱,每個名稱在其自己的行上。 我要做的是將這些名稱放入數組“ anArray”中。 只是為了檢查我是否做得很好,我輸出了一行,如您所見。

這是我用來嘗試執行此操作的代碼:

 public static void main(String[] args) throws FileNotFoundException
    { 
        File file=new File("names.txt");
        Scanner my_input= new Scanner(file);
        String [] anArray;
        anArray = new String[10];
        String a = my_input.nextLine();
        while(my_input.hasNextLine())
        {
            for(int i = 0; i<10;i++)
            {
                while (!(a.equals("\n")))
                {
                    anArray[i] = a;
                    System.out.println("Element" + i + "of the array is: " + anArray[i]);

                }
                i++;
                a=my_input.next();
            }
        }
        my_input.close();      
    }

但是,此代碼失敗,發生的結果是“數組的元素0為:名稱1”被無限次輸出,“名稱1”是文本文件中的第一個名稱。 我不知道我在做什么錯,有人可以啟發我嗎?

最里面的while循環中的條件永遠不會改變,因此內容將無限期重復。

有一些東西可以改變這句話的價值

while (!(a.equals("\n")))

必須出現在循環的主體中,否則如果開始為true,則它將保持true。

當前,您的內部while循環上有一個無限循環,您無需更新a這樣一旦輸入就將永遠循環。 我認為您想檢查i是否小於10 並且您的輸入仍然有更多行。 您可以通過單循環來實現。 try-with-resources顯式關閉相比,我也更喜歡使用try-with-resources 您可以使用String.isEmpty()防止出現空行。 就像是,

File file = new File("names.txt");
try (Scanner my_input = new Scanner(file)) {
    String[] anArray = new String[10];
    for (int i = 0; i < 10 && my_input.hasNextLine(); i++) {
        String line = my_input.nextLine();
        if (line.isEmpty()) {
            continue;
        }
        anArray[i] = line;
        System.out.printf("Element %d of the array is: %s%n", i, anArray[i]);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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