簡體   English   中英

JAVA-問題打印ArrayList

[英]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/7i8VWQLkhttp://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM