2015-09-01 45 views
1

我目前工作的一個模仿彩票和讀取從File文件包含以下信息的程序:抽籤程序,(ArrayList的)

5 
Durant Kevin 
1 15 19 26 33 46 
Schofield Michael 
17 19 33 34 46 47 
Black Joe 
1 4 9 16 25 36 
Elroy Jetson 
17 19 34 46 47 48 
Simone Raven 
5 10 17 19 34 47 

我在File內容Scan和創建要保存一個人的姓名和門票號碼的票證對象,但是當我試圖將該信息放入ArrayList任何幫助,我會感激。

這裏是我的代碼:

 try 
    { 
     Scanner scan = new Scanner(new FileInputStream(file)); 
     ArrayList<Ticket> info = new ArrayList<Ticket>(); 
     int lim = scan.nextInt(); 

     for(int i = 0; i < lim; i++) 
     { 
      String name = scan.nextLine(); 
      String num = scan.nextLine(); 
      String[] tarr = num.split(" "); 
      int[] arr = new int[tarr.length]; 

      for(int j = 0; j < tarr.length; j++) 
      { 
       arr[j] = Integer.parseInt(tarr[j]); 
      } 

      info.add(new Ticket(name, arr[]); 
     } 
     scan.close(); 
    } 

    catch(FileNotFoundException fnfe) 
    { 
     System.out.println("Error! The file was not found!"); 
    } 

} 

public class Ticket 
{ 
    public String name; 
    public int[] tarray; 

    public Ticket(String name, int[] tarray) 
    { 
     this.name = name; 
     this.tarray = tarray; 
    } 
} 
+0

爲了將來的參考,如果您也在您的問題中包含堆棧跟蹤會更好。 –

+0

不需要'FileInputStream'。 ['新的掃描儀(文件)'](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#Scanner%28java.io.File%29)將做到這一點。儘管您可能想將其移至try語句,即使用try-with-resources。 – Andreas

回答

3

你原來的代碼實際上看起來很乾淨,我只發現了以下問題:

info.add(new Ticket(name, arr[]); 

這不是傳遞變量AFAIK有效的Java語法。如果你想數的arr傳遞給Ticket類的構造函數,你應該不是這樣:

info.add(new Ticket(name, arr)); 

更新:

我已在本地測試代碼中使用的IntelliJ,唯一的我發現了其他潛在的問題是在下面一行:

int lim = scan.nextInt(); 

調用Scanner.nextInt()將光標更新到下一行。這意味着當你嘗試閱讀第二行時,你仍然會在第一行。對此的一個快速解決方案是更改爲以下代碼:

int lim = scan.nextInt(); // read in number of people 
scan.nextLine();   // advance to second line of input file 
+1

「使用IntelliJ測試過」。是的,這是一個新穎的概念。在請求其他人爲他們解決問題之前,他們測試他們的代碼。 – Andreas

+0

@Andreas我完全同意。如果他甚至花時間剪切和粘貼堆棧軌跡,他可能會自己想出來。 –

+0

@Beginner請查看給出的答案。 –

0

我相信問題是在Ticket類的構造函數中。

你不能只設置一個數組相等。但是,您可以克隆它:

this.tarray = tarray.clone(); 
+0

在Ticket構造函數中這樣做應該沒有問題。 –