我有11个不同的数组,其中包含变量名称的颜色。每个数组包含2-4个等级名称,当前点和下一个等级所需的点数。在java中,我使用scanner来获取用户输入,询问颜色名称(字符串)。我如何获取该输入以确定要使用哪个数组?假设他们处于等级颜色绿色,我如何使用字符串输入绿色来使用数组绿色?
答案 0 :(得分:0)
你正在寻找的是变量间接(或者某些变化取决于语言),并且它不应该用Java来完成(尽管如果你只想看世界燃烧,它可以用反射)。 / p>
理所当然的方法是使用Map
来代替你的颜色你正在使用的数组(或实际的等效列表,除非你想让其他程序员尖叫恐怖)。
现在问题是我没有看到任何理由你应该保持你的数组。它们的一个大问题是它们不包含连贯的数据:等级名称,应该是String
s,两种具有不同含义的点,应该是long
或其他一些数字类型
所以我建议你做的是找到一种方法将这些信息放在另一个类中,让我们说Rank
。然后你制作一个漂亮的Map<String,List<Rank>>
,它将更容易/更强大使用:
Rank firstGreenRank = colorToRanks.get("green").get(0);
long pointsNeededToReach = firstGreenRank.getPointsNeededToReach();
long howMuchPointsNeededForSomePlayer = firstGreenRank.howManyPointsStillNeededFor(somePlayer);
colorToRanks.get("blue").forEach(System.out::println); // displays every rank for a colour, assuming you've implemented Rank.toString();
//displays each colour with its associated ranks, still assuming Rank.toString() is implemented.
colorToRanks.entries().forEach((colour, ranks) ->
System.out.printf("Category %s's ranks : %s%n", ranks.join());
如果你不使用OOP的力量,那么使用Java的理由就不多了。
答案 1 :(得分:-1)
我假设您正在以这样的方式检索用户的输入:
Scanner reader = new Scanner(System.in); // Reading from System.in
System.out.println("Enter a color: ");
String inputColor = reader.next(); // Scans the next token of the input as a String.
要将inputColor
的值与数组匹配,我建议使用switch语句。
String[] temp;
switch (inputColor) {
case "green":
temp = green; //the array named "green"
break;
case "orange":
temp = orange; //the array named "orange"
break;
//etc.
default:
//set temp some default array or an error
}
虽然我选择了一个switch语句来实现,但还有很多其他方法可以实现你的目标(if-statements,hash maps等,正如其他人所说的那样)。