类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 楼答案
teamList是静态的,因此由TeamMember的所有实例共享。删除static关键字