2016-03-08 23 views
-1

我目前正在開發euler 22項目,並且提示會要求您從文件中讀取超過5000個名稱,然後對它們進行排序然後賦予它們值,但這不是我遇到的問題。我把名字讀入一個ArrayList中,但是現在我想查看我的ArrayList中有多少項。我嘗試打印出names.size();但它只是打印出零。我假設這是因爲只有一行?但是,當我打印出name.get(number);號碼是我選擇的任何號碼,它打印出應該在該框中的名稱。我如何查看ArrayList中有多少項目?我知道這與項目歐盟沒有任何關係,但只是想學習如何以供將來參考。我嘗試在網上查找如何做到這一點,但無法使其工作。有人能告訴我如何解釋代碼嗎?這裏是我的代碼的方式:如何查找我的ArrayList中的項目數量?

import java.io.File; 
import java.util.Scanner; 
import java.util.List; 
import java.util.ArrayList; 
import java.util.Arrays; 
public class main{ 
public static void main(String[] args){ 
    String name; 
    int row; 
    int count=0; 
    File filepath=new File("../names.txt"); 
    List<String> names=new ArrayList<String>(); 
    try{ 
     Scanner in=new Scanner(filepath); 
     name=in.nextLine(); 
     while(in.hasNext()){ 
      names=Arrays.asList(name.split("\\s*,\\s*")); 
     } 
    } 
    catch(Exception e){ 

    } 
    System.out.println(names.size()); 
} 
} 
+0

哇......不要說你的班級'主'這不好。您應該閱讀並遵循常見的命名約定[Java命名約定](http://java.about.com/od/javasyntax/a/nameconventions.htm) – pczeus

+0

此外,您不應該僅僅捕獲一個異常並且不要執行任何操作。你如何知道你是否有錯誤?你只是吃了它。你至少應該做一些事情,比如e.printStackTrace()或者System.err.println(e.getMessage()); – pczeus

+0

而且,新的ArrayList (Arrays.asList(arr));是優選的。 不只是Arrays.asList ..因爲這會重新啓動靜態數組。 –

回答

2

你需要names.add在你的循環,而不是賦值語句。

names.add(陣列....)

0

我覺得你有一對夫婦的問題,但最主要的是,你使用的是不匹配你所希望的方式正則表達式。假設你有一行多個名稱的文本文件,有可能是多條線路,這將工作和簡單得多:

import java.io.File; 
    import java.util.Scanner; 
    import java.util.List; 
    import java.util.ArrayList; 
    import java.util.Arrays; 

    public static void main(String[] args){ 
     String name; 
     int row; 
     int count=0; 
     File filepath=new File("names.txt"); 
     List<String> names=new ArrayList<String>(); 

     try{ 
      Scanner scan =new Scanner(filepath); 
      String someNames = ""; 
      while(scan.hasNext()){ 
       someNames = scan.nextLine(); 
       List<String> namesList = Arrays.asList(someNames.split(" ")); 
       names.addAll(namesList); 
      } 
     } 
     catch(Exception e){ 
      e.printStackTrace(); 
     } 

     System.out.println(names.size()); 
     for(String aName: names){ 
      System.out.println(aName); 
     } 
    } 

必要時,可以改變分割值,但保持它的簡單。 如果名稱用逗號分隔,只需將split(" ")更改爲split(",") 另外,您在進入while循環之前正在執行scanner.nextLine(),因此丟失了文件中的第一行。最後,請注意names.addAll(namesList),它確保您存儲在一行中找到的所有名稱。

0

由於名單名稱是結果,您應該在結果的下一行添加新名稱。我認爲下面的代碼可能工作。

while(in.hasNext()){ 
    names.addAll(Arrays.asList(name.split("\\s*,\\s*"))); 
} 
相關問題