这个问题在这里已有答案:
我最近遇到的情况有点类似于此。
Scanner sc = new Scanner(System.in);
int a = sc.nextInt(), ... , g = sc.nextInt(), x = sc.nextInt(), y = sc.nextInt(), z;
z = x * y;
switch (z) {
case a : //print something
break;
.
.
.
case g : //print something
break;
default : //print something
break;
}
我遇到了所有案例标签的错误。我检查了一些教程并没有得到所有的答案。我需要知道我是否可以使用switch语句,因为它是我必须使用的约束。
正如评论中指出的那样,您不能将变量用作切换案例。
每当你发现自己用多个变量做同样的事情时(例如将sc.nextInt()
分配给每个变量a
到g
),你应该考虑使用循环代替。
例如:
ArrayList<Integer> inputs = new ArrayList<>();
for (int i = 0; i < 7; i++) {
inputs.add(sc.nextInt());
}
然后,您可以简单地遍历列表,而不是您的switch
语句。
for (int i : inputs) {
if (z == i) {
doSomething();
}
}
您可以简单地生成整数和方法之间的映射。由于你的所有评论声明这将打印一些东西,让我们假设你想要一个String
,所以你想要“提供”一个基于整数的String
。
首先,让我们定义一些函数:
List<Supplier<String>> functions = new ArrayList<>();
functions.add(() -> "Function #1");
functions.add(() -> "Function #2");
functions.add(() -> "Function #3");
functions.add(() -> "Function #4");
然后,让我们为每个函数创建一个映射:
Map<Integer, Supplier<String>> map = new HashMap<>();
for(Supplier<String> s : functions){
System.out.print("Define a key for the next function :" );
map.put(sc.nextInt(), s);
}
就是这样,你已经为每个函数定义了(不是如果你输入两次相同的键,只有最后一个函数将被设置为该函数,如果你想要的话可以使用Collection
)
让我们获取函数并执行它以获取值:
System.out.println("Execute:");
String value = map.get(sc.nextInt()).get();
这是一个短代码,不会阻止任何NullPointerException
发生,这不是这个答案的主题。
PS:别忘了关闭Scanner
sc.close();