【问题标题】:Issue Tracking program - objects in an ArrayList问题跟踪程序 - ArrayList 中的对象
【发布时间】:2016-01-24 11:31:47
【问题描述】:

对不起,如果我犯了一些愚蠢的错误。我正在做一项学校作业,我应该创建一个问题跟踪程序。每个问题必须由一个对象表示,并且这些对象必须存储在一个 ArrayList 中。必须有一个菜单,用户可以在其中选择创建新问题、将创建的问题标记为已解决、查看已解决和未解决的问题。每当我输入一个新对象时,我制作的 ArrayList 都无法正确存储对象,所有其他对象都更改为我输入的对象,我被困在这个...任何帮助将不胜感激!谢谢!

这是我的代码(我认为问题始于“if (option == 1)”):

public static void main(String[] args) {
    int option = 0;
    Scanner input = new Scanner(System.in);

    ArrayList<IssueTracking> myIssueList = new ArrayList<>();
    IssueTracking issueNum = new IssueTracking();  

    mainMenu();
    option = input.nextInt();

    while (option != 1 && option != 2 && option != 3 && option != 4 && option != 0){
        System.out.println("Invalid option, please choose 1, 2, 3, 4 or 0 in the menu.");
        mainMenu();
        option = input.nextInt();
     }

    while(option !=0){

        while (option != 1 && option != 2 && option != 3 && option != 4 && option != 0){
        System.out.println("Invalid option, please choose 1, 2, 3, 4 or 0 in the menu.");
        mainMenu();
        option = input.nextInt();
     }


        if (option == 1){
            System.out.println("Please describe the issue bellow: ");
            String issueDescription = input.nextLine();
            issueDescription = input.nextLine();

            issueNum.setIssueDescription(issueDescription);
            issueNum.setIsSolved(Boolean.FALSE );
            myIssueList.add(issueNum);
            System.out.println(myIssueList.toString().replace("[", "").replace("]", "").replace(",", ""));   

            returnMenu();
            mainMenu();
            option = input.nextInt();
        }
        if (option == 2){
            System.out.println("Please press 1 to mark the issue as solved: ");
            Boolean isSolved = input.nextBoolean();

            issueNum.setIsSolved(isSolved);

            myIssueList.add(issueNum);
            //System.out.println("\n"+myIssueList.toString().replace("[", "").replace("]", ""));  

            returnMenu();
            mainMenu();
            option = input.nextInt();
        }    

        if (option == 3){
            //View unsolved issues.
            System.out.println(myIssueList);

            returnMenu();

            mainMenu();
            option = input.nextInt();

        }
        if (option == 4){
            //View solved issues.
            System.out.println(issueNum.getIssueDeString()+issueNum.getIsSolved());

            returnMenu();

            mainMenu();
            option = input.nextInt();
        }
    }                       
}    

}

问题类:

public class IssueTracking {
private String issueDescription;
private Boolean issueSolved;

public void setIssueDescription(String issueDescription){
    this.issueDescription = issueDescription;
}

public String getIssueDeString(){
    return issueDescription;
} 

public void setIsSolved (Boolean issueSolved){
    this.issueSolved = issueSolved;
}

public Boolean getIsSolved() {
    return issueSolved;
}

public String toString(){
    return "The issue is: " + getIssueDeString() +"\n"+ "The issue is solved: " + getIsSolved()+"\n"; // 
}

【问题讨论】:

  • 选项 4 不查看列表,它只查看一个对象

标签: java object arraylist


【解决方案1】:

基本上,您正在尝试一次又一次地重用同一个对象,因此您会看到一个对象中的变化字段也会影响另一个对象。你应该做的是:

if (option == 1) {
      IssueTracking issueNum = new IssueTracking();
      ...//get or set values
      myIssueList.add(issueNum);
}

同样,您应该询问已解决的问题编号,并且应该只更新该问题(我会为此使用 Map,其中键是问题编号,值是 IssueTracking)

【讨论】:

    【解决方案2】:

    问题在于您正在重用 issueNum 对象 - 当您输入第一个条目时,它被添加到列表中,当您输入第二个条目时,您编辑现有条目,然后添加另一个相同的副本对象等。

    创建一个新实例将解决这个问题:

        if (option == 1){
            System.out.println("Please describe the issue bellow: ");
            String issueDescription = input.nextLine();
            issueDescription = input.nextLine();
    
            issueNum=new IssueTracking();
            issueNum.setIssueDescription(issueDescription);
            issueNum.setIsSolved(Boolean.FALSE );
            myIssueList.add(issueNum);
            System.out.println(myIssueList.toString().replace("[", "").replace("]", "").replace(",", ""));   
    
            returnMenu();
            mainMenu();
            option = input.nextInt();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      相关资源
      最近更新 更多