2017-04-02 39 views
0

我有一个文本文件“名称”,其中包含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“是文本文件中的第一个名字。我不知道我在这里做错了什么,有谁能够启发我?

+1

什么是'while(!(a.equals(“\ n”)))'意在做什么?因为你不更新'while'循环中的'a',它应该是一个**红旗**。 –

+0

@ElliottFrisch将名称分隔成不同的数组元素。我认为,当名称结束,因此扫描仪遇到“\ n”时,我会增加一个。 –

+1

您不在最里面的while循环中前进扫描仪。 –

回答

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(); 
} 
+0

我不太确定尝试的功能,因为我之前没有看到它。谷歌搜索说“异常处理”。在这种情况下会有什么例外?此外,“继续;”行,这是否意味着'我'会遇到它会增加? –

+0

@YakSalTafri **'FileNotFoundException' **。['尝试与资源'](https://docs.oracle.com/javase /tutorial/essential/exceptions/tryResourceClose.html)。试试看看。 –

1

最里面的while循环中的条件从不改变,所以内容将无限期地重复。

一些改变

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

必须出现在循环体语的值,否则,如果它开始了真正的会留真实。

+0

啊,我搬了“a = my_input.next();”以便循环内的“a”发生变化,现在输出最后9个名称,但第一个名称不是,并且它们都是“数组的元素0”,所以看起来像我不是递增。它也看到一个名字被“John William”分隔为两个名字,“John”和“William”。 –

+0

从您所评论的内容来看,对我而言听起来像您现在已经意识到足够的问题来解决此问题,以使您满意。 –