我现在正在上Java类,我们应该做一个基于文本的游戏。我们游戏中的选项之一是允许该人在3种船只类型之间进行选择;小,中和大。根据他们的选择,他们将能够选择有多少人乘船旅行。小允许最多3个,中允许最多6个,大允许最多9个。一旦做出选择,他们就可以为每个机组成员输入名称并选择研究专业。以前,我们将这些设置为单独的菜单(选择“舰船”,“船员人数”,“研究规格”和“名称”),但我开始认为在同一菜单中选择船员人数,姓名和研究规格会更容易。
也就是说,我们现在正在处理array / ArrayLists,我们应该使用数组列出游戏中的角色(NPC)。因此,我需要弄清楚如何根据选择的机组人员数(1至9之间)创建一个数组,然后让其提示输入名称,然后允许他们从研究规格列表中进行选择。他们将输入一个字母以供选择,但阵列应在其中输入研究规格的全名。我在另一篇文章中找到了一些代码,我认为在这种情况下可能会有所帮助,但这几乎没有触及到我的想法。任何帮助将不胜感激。
public class Name {
public static void main(String[] args) {
ArrayList<String> name = new ArrayList<String>();
ArrayList<(how do I tell it to select a character option here?)> researchSpec = new ArrayList<(selected option)>();
Scanner sc = new Scanner(System.in);
while (true) {
System.err.println("Please enter the name of your crew member: ");
name.add(sc.next());
System.out.println("Please select a Science Specialization for your crew member");
researchSpec.add(sc.next());
}
}
}
最佳答案
当您为某个事物准备了少量的预定义的可能值时,enum
通常是表示这些值的理想选择。
public enum Specialization {
PHYSICS,
CHEMISTRY,
BIOLOGY
}
现在,您可以定义类型为
Specialization
的变量和类型为List<Specialization>
的列表,并将值引用为Specialization.PHYSICS
等。这比使用String
更好,因为您不会冒以下风险:例如在代码中的某个地方拼写了一个特殊化的拼写错误,例如将"Pysics"
添加到列表中的某个位置,并想知道为什么if (specialization.equals("Physics"))
永远无法工作。但是,从字母到专业化的映射仍然需要一些
if
,switch
或Map
-除非您喜欢枚举。枚举实际上是一个类,但是您不能在其上使用new
-而是,每个标识符自动有一个实例(在这种情况下,PHYSICS
,CHEMISTRY
和BIOLOGY
是仅有的三个实例) 。您可以将字段,构造函数和方法添加到枚举类,以便可以为每个值赋予不同的属性:public enum Specialization {
PHYSICS('p', "Physics"),
CHEMISTRY('c', "Chemistry"),
BIOLOGY('b', "Biology");
private char menuLetter;
private String displayName;
private Specialization(char menuLetter, String displayName) {
this.menuLetter = menuLetter;
this.displayName = displayName;
}
public char getMenuLetter() { return menuLetter; }
public String getDisplayName() { return displayName; }
}
您可以使用
values()
来获取所有值的列表。例如,这将生成菜单选项(我将把选择内容留给您作为练习):for (Specialization s : Specialization.values()) {
System.out.println(s.getMenuLetter() + ": " + s.getDisplayName());
}
编辑:或定期循环:
Specialization[] specializations = Specializations.values();
for (int i = 0; i < specializations.length; i++) {
System.out.println(specializations[i].getMenuLetter() + ": " + specializations[i].getDisplayName());
}