繁体   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