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

问题描述 投票:-2回答:2

这个问题在这里已有答案:

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

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

java switch-statement conditional
2个回答
1
投票

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

每当你发现自己用多个变量做同样的事情时(例如将sc.nextInt()分配给每个变量ag),你应该考虑使用循环代替。

例如:

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();
  }
}

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();
© www.soinside.com 2019 - 2024. All rights reserved.