2017-02-14 70 views
-1

我目前正試圖通過使用GUI來製作彩票程序。我無法弄清楚爲什麼getTicketNumbers()方法沒有返回任何東西。它僅僅是打印[]。JAVA - 問題打印ArrayList

所以也就是:

String output = "Name: " + name + "\nNumbers: " + ticketNumbers + "\n\n"; 

tickNumbers的輸出[],但名成功打印出了名。

我添加了一個到是System.out.print票證類的構造函數,以確認該ArrayList被順利通過,它是:

public Ticket(ArrayList<Integer> ticketNumbers, String name) { 
    this.ticketNumbers = ticketNumbers; 
    this.name = name; 
    System.out.print("Are the numbers being passed:" + ticketNumbers + "\n"); 
} 

toString方法被成功打印的名字,但再次,它不打印名爲ticketNumbers的ArrayList。

private void enterLottoButtonActionPerformed(java.awt.event.ActionEvent evt) {             
    if (nameInput.getText().equalsIgnoreCase("")) { 
     JOptionPane.showMessageDialog(null, "Please Enter Your Name", "Error", JOptionPane.ERROR_MESSAGE); 
    } else if (ticketNumbers.size() < 4) { 
     JOptionPane.showMessageDialog(null, "Please Enter Four Numbers", "Error", JOptionPane.ERROR_MESSAGE); 
    } else { 
     ticketList.add(new Ticket(ticketNumbers, nameInput.getText())); 

     JOptionPane.showMessageDialog(null, "You Successfully Entered! \n\nName: " + nameInput.getText() + "\nNumbers: " + ticketNumbers.toString()); 

     ticketNumbers.clear(); 
     numbersTextField.setText(""); 
     nameInput.setText("");  
     numberOfPeopleLabel.setText("   People Entered: " + ticketList.size()); 
    } 

客票艙位等級:

import java.util.ArrayList; 
import java.util.Collections; 
import javax.swing.JOptionPane; 

public class Ticket { 
    private String name; 
    private ArrayList<Integer> ticketNumbers = new ArrayList<>(); 

public Ticket(ArrayList<Integer> ticketNumbers, String name) { 
    this.ticketNumbers = ticketNumbers; 
    this.name = name; 
    System.out.print("Are the numbers being passed:" + ticketNumbers + "\n"); 
} 

public String getName() { 
    return name; 
} 

public ArrayList<Integer> getTicketNumbers() { 
    return ticketNumbers; 
} 

public ArrayList<Integer> getSortedTicketNumbers() { 
    Collections.sort(ticketNumbers); 
    return ticketNumbers; 
} 

@Override 
public String toString() { 
    String output = "Name: " + name + "\nNumbers: " + ticketNumbers + "\n\n"; 

    return output; 
} 
} 

如果需要的話,其全部代碼: http://pastebin.com/7i8VWQLkhttp://pastebin.com/iRd49Nc7

+0

如果您可以爲該程序添加驅動程序並向我們顯示示例輸出,那將會有所幫助。但是我注意到'ticketNumbers.clear();'上面有一行,這讓我懷疑你在某個時候刪除了你的票號。 – markspace

+0

由於ticketNumbers爲空。你在那裏添加什麼東西? –

+0

我創建了一個類的實例:ticketList.add(new Ticket(ticketNumbers,nameInput.getText()));然後我清除GUI類中的數組,以允許其他用戶爲抽獎選擇另一組數字 – Aontaigh

回答

1
ticketNumbers.clear() 

此行引起的問題。如您所說,在建造Ticket對象時,數據已正確傳入此行:ticketList.add(new Ticket(ticketNumbers, nameInput.getText()));。但是你之後清除了它們。你將需要一個ticketList的克隆。無論最佳做法如何,您都可以在Ticket課程中完成。

private List<Integer> clonedTicketNumbersList = new ArrayList<Integer>(); 

public Ticket(ArrayList<Integer> ticketNumbers, String name) { 
    this.ticketNumbers = ticketNumbers; 
    this.name = name; 
    for(Integer ticketNum : ticketNumbers) { 
     clonedTicketNumbersList.add(ticketNum); 
    } 
    System.out.print("Are the numbers being passed:" + ticketNumbers + "\n"); 
} 

@Override 
public String toString() { 
    String output = "Name: " + name + "\nNumbers: " + clonedTicketNumbersList + "\n\n"; 

    return output; 
} 
+0

您將在哪裏創建克隆? – Aontaigh

+0

@aontaigh看到我的更新答案,在循環之前聲明它。 –

+0

這是完整的代碼:http://pastebin.com/7i8VWQLk - 你會在哪裏放這段代碼?我很欣賞這種方式的幫助! – Aontaigh

1

它看起來像你複製引用列表,所以當你清除它在一個地方(或修改它)它改變/清除到處。

嘗試製作防禦性副本。像:

ArrayList<Integer> tickets = new ArrayList<>(ticketNumbers)