我有一个文本文件"姓名"其中包含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;是文本文件中的第一个名称。我不知道我在这里做错了什么,有人可以启发我吗?
答案 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();
}