Java - 从类中调用私有数组列表[重复]
Posted
技术标签:
【中文标题】Java - 从类中调用私有数组列表[重复]【英文标题】:Java - Calling private arraylist from class [duplicate] 【发布时间】:2016-06-06 05:10:30 【问题描述】:我的模板打开一个选项菜单,用户输入 1-3 之间的内容来选择三个选项之一。
当用户选择选项 1 时,它要求他们输入一个数字teamNumber
。必须实例化类Team
,然后将其写入数组列表。
如果numberList
中至少有一个数字,用户可以选择选项 2。它要求他们输入数组列表中的任何数字并搜索它。如果找到他们输入的数字,则输入一个字符串teamMemberFirstName
和一个字符firstInitialLastName
。然后它将输入写入位于另一个类 TeamMember
中的私有数组列表中。
一旦他们在选项 1 和 2 中输入了信息,他们就可以选择选项 3。它允许您根据输入的团队编号打印输入的名称列表。
我不确定如何在选项 3 中从 TeamMember
类 teamList
调用私有数组列表。有关如何进行此步骤的任何指导?我的代码如下。
主类:
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);
System.out.println("Success!");
if (foundIt == false)
System.out.println("Try again.");
if (input.equals("3"))
for (int a = 0; a < numberList.size(); a++)
Team addTeam = numberList.get(a);
//Not sure what to put where there are ????'s - I tried a few ideas and stuff I found online, but nothing worked
//I assume I call the method/class here????
System.out.println("Team: " + addTeam.findTeam() + " Members: " +
"I will put the member called from the arraylist here????");
while (stayInLoop == true;)
团队成员类:
public class TeamMember
private final String teamMemberFirstName;
private final char firstInitialLastName;
private 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();
【问题讨论】:
从逻辑上讲,您的团队成员列表应该在您的Team
类中,而不是TeamMember
类中。然后只需定义一个 getter 来从 Team
类中获取私有列表。
【参考方案1】:
您不能直接访问其他类的私有字段。将您的列表移动到 Team 类或创建一个 getter 来检索列表。
【讨论】:
从我解释分配的方式来看,列表似乎必须是私有的(至少在提供的小代码中是这样),所以你的第二个选项可能是我的米找。我尝试在 TeamMember 类中创建一个 getter 来检索列表,但不确定如何在主类中设置它。有什么想法,或者我对此有什么想法吗? 好吧,我在你的代码中看到的是,每次你创建一个团队成员时,你都是在创建一个新的team list
,这不会按照你想要的方式工作。我会将您的 teamList 移到主类中,这样您就只有一个副本【参考方案2】:
在公共类中,您可以在公共方法中返回private
对象。这似乎是这个项目中最简单的方法。向您的 TeamMember
类添加一个新方法,并让它返回 teamList
:
//在您的 TeamMember 类中,分配私有变量后的任何位置
public static ArrayList show()
//the static keyword, in short, will make the method callable without a class instance.
return teamList;
由于 TeamMember 方法 show()
现在是静态的,您应该可以简单地调用 TeamMember.show()
并获取 ArrayList。
重要提示:为了让它工作,你也必须将私有数组列表设为静态。静态对象不能调用非静态对象。
这将把它变成private static ArrayList<TeamMember> teamList = new ArrayList<>();
在 Main 类中,就像我上面所说的,只需调用 TeamMember.show()。您不需要创建实例。
【讨论】:
teamList 已针对该作业设置为私有,因此我不确定是否可以更改它。 哦。在这种情况下,安全总比后悔好。我会编辑答案。 新方法有效,我知道你要去哪里了。我不确定如何在不创建类的新实例的情况下将 TeamMember.show() 分配给变量/调用方法。这似乎是我首先陷入困境的地方 - 无论我尝试什么都会返回错误:非静态方法 show() 不能从静态上下文中引用 好的,我再编辑一下。【参考方案3】:如果您将 teamList
更改为 public
而不是 private
您的 Main
类将能够访问该变量。当您在 Java 中创建 private
时,您基本上使该实例变量只能通过实例化它的类访问。如果您希望该变量对其他类可见以供参考,您应该将其设为 public
由于分配调用它,您将需要为您的“teamList”变量定义一个 getter 和 setter。
public void setArray(ArrayList newTeamList)
teamList = newTeamList;
public ArrayList getArray()
return teamList;
这将允许您通过方法访问私有变量
【讨论】:
赋值似乎要求它是私有的,因为 TeamMember 中声明数组列表的代码行已提供给我们,并且它被设置为私有。 这很愚蠢,因为在这种情况下实际上不需要调用私有声明。如果是这种情况,那么您需要为“teamList”编写 getter 和 setter 方法,这样您就可以从类外部访问私有实例变量。以上是关于Java - 从类中调用私有数组列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章
C ++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表[重复]