在java中的switch语句中使用整数变量

时间:2018-01-03 11:10:17

标签: java switch-statement conditional

我最近遇到的情况有点类似于此。

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语句,因为它是我必须使用的约束。

2 个答案:

答案 0 :(得分:1)

正如评论中所指出的,你不能将变量用作切换案例。

每当您发现自己使用多个变量做同样的事情(例如为每个变量sc.nextInt()分配ag)时,您应该考虑使用循环。< / 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();