2015-01-12 35 views
-4

我在樂透中有一個列表,我在其中插入了對象lottoTicket。像顯示在下面我如何使列表大小不會總是爲零

if(choice.equals("P")) 
{ 
    int i = 1; 

    System.out.println("Choose a number between 1 and 90:"); 
    List<Integer> list = new ArrayList<>(); 
    list.add(s.nextInt()); 


    LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++); 
    Lotto l = new Lotto(); 
    l.li.add(lt);  

} 

我的問題是,在樂透我有li.size(),其總是打印0(因此總是返回0),即使我已經在3個對象,並將它們分配給該列表中已經。下面的代碼在Lotto Class中。

List<LottoTicket> li = new ArrayList(); 

@Override 
public void draw(){ 

    Random rand = new Random();  

    int[] array = new int[6]; 


    for (int i = 1; i < array.length ; i++) { 
     array[i] = rand.nextInt(91) + 1; 
     System.out.println("Tickets sold: " + li.size()); 
     System.out.print(""+ array[i] + ","); 
    } 


} 
+0

糟糕的格式 –

+0

您可能想要發佈整個方法定義。看起來您可能會爲每張票創建一個新的樂透對象,而不是將其存儲在任何地方,但我無法確定。 –

+0

也許問題是,比我插入列表中的任何東西,可以請告訴我我需要做什麼,因爲上面的代碼是我所有有關這個問題 – user3679986

回答

0

從代碼段在其上方,其中要添加的陣列array的內容li不明顯我。繪圖函數中的for循環僅爲array賦值,但從不向列表添加任何內容。還值得一提的是,既然你初始化i = 1一個你只產生過5 array位置存儲在array地點1 5周隨機數0永不訪問

+0

我使用l.li.add(lt)添加它; li是我在Lotto Class – user3679986

+0

中的數組列表,我想分配的是LottoTicket lt = new LottoTicket(「Prima」,money * 60,list,i ++)而不是數組 – user3679986

0

沒有更多的代碼,這幾乎是不可能的「猜」你的問題可能是,但作爲黑暗中的刺,我會假設你的對象不是全球性的。

LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++); 
Lotto l = new Lotto(); 
l.li.add(lt); 

這裏的這個部分,在我看來,就像你每次創建一個新的對象Lotto一樣。相反,爲什麼不把它定義爲全局類,這樣就可以確定你只有一個對象。像這樣:

// Top of the class(global scope) 
private Lotto mLotto = new Lotto(); 

然後你可以在該類的任何地方訪問它,並知道你只訪問1個對象。

順便說一句,它的編碼非常差揭露成員外部類,除非你沒有選擇,在這種情況下我會使用類似以下內容(但通常總是選擇!):

因此,在你的代碼的情況下
class Lotto { 
    // define as private to avoid possible errors later on 
    private List<LottoTicket> mTickets = new ArrayList<LottoTicket>(); 

    // define getter to return the list as a whole 
    public List<LottoTicket> getTickets() { return mTickets; } 

    // define an add Ticket method to add the data to the object, rather than 
    // access Lotto.li.add etc... 
    public void addTicketToList(LottoTicket thisTicket){ 
     mTickets.add(thisTicket); 
    } 
} 

上面你會使用類似:

LottoTicket lt = new LottoTicket("Prima",money * 60,list, i++); 

// Replace all this 
// Lotto l = new Lotto(); 
// l.li.add(lt); 

// with 
myGlobalLottoObject.addTicketToList(lt); 

// And then loop through the collected tickets with something like: 
foreach(LottoTicket lt : myGlobalLottoObject.getTickets()) 
{ 
    // Do something here with each "lt" object that is returned 
} 

你在正確的軌道上,但是你錯過的類和代碼結構的一些基本認識。希望這會幫助你解決問題的根本。

很明顯,如果這對你沒有幫助,那麼你將不得不發佈更相關的代碼,以便我們能夠準確地看到你錯誤的位置。