我现在正在学习Java课程,我们应该制作一个基于文本的游戏。我们游戏中的一个选项是允许此人在3种船型中进行选择;小,中,大。根据他们的选择,他们将能够选择在船上旅行的人数。小允许最多3个,中等最多6个,大到9个。一旦做出这个选择,他们就可以输入每个机组成员的名字并选择研究专业。以前,我们将这些设置为单独的菜单(选择船舶,船员规模,研究规格和名称),但我开始认为在同一菜单中选择船员规模,名称和研究规格会更容易。
也就是说,我们现在正在研究数组/数组列表,我们应该使用数组来列出游戏中的字符(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());
}
}
}
答案 0 :(得分:2)
如果您拥有一组预定义的小型可能值,则enum
通常是表示这些值的理想选择。
public enum Specialization {
PHYSICS,
CHEMISTRY,
BIOLOGY
}
现在,您可以定义类型Specialization
的变量和类型List<Specialization>
的列表,并将值称为Specialization.PHYSICS
等。这比使用{{1更好因为你没有冒风险的例子在代码中的某处拼错专门化,例如在一个地方将String
添加到列表中,并想知道为什么"Pysics"
永远无效。
但是,对于从字母到专精的映射,您仍需要一些if (specialization.equals("Physics"))
,if
或switch
- 除非您对枚举感兴趣。枚举实际上是一个类,但您不能在其上使用Map
- 而是每个标识符自动生成一个实例(在本例中为new
,PHYSICS
和{{1是三个唯一的实例)。您可以向枚举类添加字段,构造函数和方法,以便为每个值赋予不同的属性:
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()
答案 1 :(得分:0)
根据选择创建一个数组然后填充它将如下所示:
NPC[] npcs;
if (amount > maximum) {// both values prompted
System.our.println("Too much crew members.");
return;
}
npcs = new NPC[amount];
for (int i = 0; i < npcs.length; i++) {
String name = // prompt name
Specialization s = // prompt that somehow -> enum solution by Aasmund Eldhuset
npcs[i] = new NPC(name, s);
}
NPC类看起来像这样:
public class NPC {
public (final?) String name;
public (final?) Specialization spc;
public NPC(String name, Specialization s) {
this.name = name;
this.spc = s;
}
}