[英]JAVA - Issues Printing ArrayList
我目前正在嘗試通過使用GUI制作彩票程序。 我不知道為什么方法getTicketNumbers()不返回任何東西。 它只是打印[]。
因此:
String output = "Name: " + name + "\nNumbers: " + ticketNumbers + "\n\n";
tickNumbers輸出[],但name成功打印出了名字。
我在構造函數的Ticket類中添加了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成功地打印了名稱,但是再次,它沒有打印稱為票證號碼的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/7i8VWQLk和http://pastebin.com/iRd49Nc7
似乎您正在將引用復制到列表,因此當您在一個位置清除(或修改)引用時,它會在所有地方更改/清除。
嘗試制作防御性副本。 喜歡:
ArrayList<Integer> tickets = new ArrayList<>(ticketNumbers)
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.