我最近遇到的情况有点类似于此。
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语句,因为它是我必须使用的约束。
答案 0 :(得分:1)
正如评论中所指出的,你不能将变量用作切换案例。
每当您发现自己使用多个变量做同样的事情(例如为每个变量sc.nextInt()
分配a
到g
)时,您应该考虑使用循环。< / p>
例如:
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();
}
}
答案 1 :(得分:0)
您可以简单地生成整数和方法之间的映射。由于您的所有评论都会说明会打印一些内容,因此我们假设您需要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();