有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类Java向ArrayList添加了用户输入,需要用另一个ArrayList中的变量分隔

“我的模板”将打开一个选项菜单。当用户选择选项1时,它要求他们输入一个数字teamNumber。必须实例化类Team,然后将其写入arraylist

如果numberList中至少有一个数字,用户可以选择选项2。它要求他们输入arraylist中的任何数字并进行搜索。如果找到了他们输入的号码,则输入团队成员。它将把输入写入位于类TeamMember中的私有arraylist

除了一个问题,我很快就能把这一切弄清楚。似乎无论在选择选项2后输入哪个存储的团队编号,我添加到teamList的团队成员都会添加到所有团队编号,而不仅仅是我希望添加到的编号。所以,假设在选项1中,我添加了一个团队1和一个团队2。然后在选项2中,我键入1并继续输入成员。它最终将团队成员添加到团队1和团队2。有办法解决这个问题吗?我尝试了一些选择,但似乎无法控制自己

public class Main {
public static void main(String[] args) {
                    int choosing;
Scanner scan = new Scanner(System.in);
String input;
int teamNumber;
boolean stayInLoop;
ArrayList<Team> numberList = new ArrayList<Team>();
do {
stayInLoop = true;
  System.out.println("1. Add a new team");
  System.out.println("2. Add a new team member");
  System.out.println("3. View teams");
  input = scan.nextLine();

  if (input.equals("1")) {
    System.out.println("Enter a team number:");
    teamNumber = scan.nextInt();
    scan.nextLine();
    Team addTeam = new Team(teamNumber);    
    numberList.add(addTeam);
  }

  if (input.equals("2")){
  boolean foundIt = false;
  boolean valid = true;
    System.out.println("Team number:");
    teamNumber = scan.nextInt();
    scan.nextLine();
      for (int a = 0; a < numberList.size() && foundIt == false; a++){
      Team addTeam = numberList.get(a);
        if (addTeam.findTeam() == teamNumber) {
          foundIt = true;
          System.out.println("Enter first name of team member:");
          String teamMemberFirstName = scan.nextLine();
          System.out.println("Enter first initial of last name:");
          char firstInitialLastName = scan.nextLine().charAt(0);
          TeamMember inputTeamMember = new TeamMember(teamMemberFirstName, firstInitialLastName);
          inputTeamMember.addMember(inputTeamMember, valid = true);
          int teamSize = (inputTeamMember.size(valid = true));
          System.out.println("Team " + teamNumber + " has " + teamSize + " members!");
        }
      }
        if (foundIt == false) {
          System.out.println("Try again.");
        }
    }
}while (stayInLoop == true;)
}}

团队成员:

public class TeamMember {

//the code provided in the task had teamList set to private, so I'm assuming it's required to be that way. I added static in order to eventually be able to call it with a method to view the team in option 3. But if the only solution involves changing the list to public, then so be it.
private final String teamMemberFirstName;
private final char firstInitialLastName;
private static ArrayList<TeamMember> teamList = new ArrayList<>();

public TeamMember(String teamMemberFirstName, char firstInitialLastName) {
  this.teamMemberFirstName = teamMemberFirstName;
  this.firstInitialLastName = firstInitialLastName;
}
public int addMember(TeamMember member, boolean valid) {
  valid = teamList.add(member);
  return teamList.size();
}
public static int size(boolean valid) {
  return teamList.size();
}
}

共 (1) 个答案

  1. # 1 楼答案

    teamList是静态的,因此由TeamMember的所有实例共享。删除static关键字