[英]JAVA - Issues Printing ArrayList
I'm currently attempting to make a lottery program through the use of a GUI. 我目前正在尝试通过使用GUI制作彩票程序。 I can not figure out why the method getTicketNumbers() is not returning anything.
我不知道为什么方法getTicketNumbers()不返回任何东西。 It is simply printing [].
它只是打印[]。
And so too is: 因此:
String output = "Name: " + name + "\nNumbers: " + ticketNumbers + "\n\n";
tickNumbers is outputting [] but name successfully prints out the name. tickNumbers输出[],但name成功打印出了名字。
I added a System.out.print to the Ticket class in the constructor to confirm the ArrayList is being passed successfully and it is: 我在构造函数的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");
}
The method toString is successfully printing the name but again, it is not printing the ArrayList called ticketNumbers. 方法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());
}
Ticket Class: 机票类别:
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;
}
}
If needed, code in its entirety: http://pastebin.com/7i8VWQLk and http://pastebin.com/iRd49Nc7 如果需要,请完整编码: http : //pastebin.com/7i8VWQLk和http://pastebin.com/iRd49Nc7
It looks like you're copying the reference to the list, and so when you clear it in one place (or modify it) it changes/clears everywhere. 似乎您正在将引用复制到列表,因此当您在一个位置清除(或修改)引用时,它会在所有地方更改/清除。
Try making a defensive copy. 尝试制作防御性副本。 Like:
喜欢:
ArrayList<Integer> tickets = new ArrayList<>(ticketNumbers)
ticketNumbers.clear()
This line cause the problem. 这条线导致问题。 As you said, during the construction of
Ticket
object, the data been passed in correctly in this line: ticketList.add(new Ticket(ticketNumbers, nameInput.getText()));
如您所说,在构造
Ticket
对象的过程中,数据已在此行中正确传递: ticketList.add(new Ticket(ticketNumbers, nameInput.getText()));
. 。 But you cleared them afterwards.
但是您之后清除了它们。 You will need a clone of
ticketList
. 您将需要
ticketList
。 Regardless of the best practice, you can do it inside Ticket
class. 无论采用哪种最佳做法,都可以在
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.