将文件中的名称放入数组会导致无限循环

时间:2017-04-02 19:27:41

标签: java arrays text

我有一个文本文件"姓名"其中包含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();      
    }

然而,这段代码失败了,会发生什么是&#34;数组的元素0是:name 1&#34;输出无限次,&#34;名称1&#34;是文本文件中的第一个名称。我不知道我在这里做错了什么,有人可以启发我吗?

2 个答案:

答案 0 :(得分:1)

最里面的while循环中的条件永远不会改变,因此内容将无限重复。

要改变短语

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

必须出现在循环体中,否则如果它开始为真,它将保持为真。

答案 1 :(得分:0)

您目前在内部while循环中有一个无限循环,您不会更新a,以便在输入后永远循环。我想您要检查i是否小于10 您的输入还有更多行。你可以用一个单循环来做到这一点。我还希望明确关闭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();
}