Java switch语句处理两个变量?

我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在Java中是不可能的。

这里有一些我想用开关实现的伪代码。

int s1Value = 0; int s2Value = 0; String s1 = "a"; String s2 = "g"; switch (s1 || s2) { case "a": s1value = 0; s2value = 0; break; case "b": s1value = 1; s2value = 1; break; case "c": s1value = 2; s2value = 2; break; case "d": s1value = 3; s2value = 3; break; case "e": s1value = 4; s2value = 4; break; case "f": s1value = 5; s2value = 5; break; case "g": s1value = 6; s2value = 6; break; } 

根据您的要求使用单个开关是不可能的。 这与您使用Java一样接近。

  switch (s1) { case "a": doAC(); break; case "b": doBD(); break; default: switch(s2) { case "c": doAC(); break; case "d": doBD(); break; } } 

使用单个开关执行此操作的唯一方法是首先合并这两个值,找到具有最高优先级的值,然后将开关应用于结果。 在您的示例中,s1和s2的最小值,并打开结果。

由于“a”到“g”是一个例子,你需要有一些有意义的方法来首先对真实值进行排名。

您是否考虑过不使用switch语句而是使用查找表?

 public class MyClass { private static final Map valuesMap; static { Map aMap = new HashMap<>(); aMap.put("a", 0); aMap.put("b", 1); ..... rest ..... valuesMap = Collections.unmodifiableMap(aMap); } public void foo() { int s1Value = 0; int s2Value = 0; String s1 = "a"; String s2 = "g"; if( valuesMap.containsKey(s1) ) { s1Value = valuesMap.get(s1); s2Value = s1Value; } else if( valuesMap.contansKey(s2) ) { s1Value = valuesMap(s2); s2Value = s1Value; } } } 

如果你需要s2Value的一组不同的值,那么你可以构造一个第二个映射来拉取它们。

由于你想使用一个开关,我认为这意味着可能的候选者和值是一个固定的,在开发时列表中已知,所以使用这样的静态初始化映射应该不是问题。

您可以在不使用开关的情况下执行您想要的操作,只需编写:

 s1value = s1.charAt(0)-'a'; //returns 0 if s1value="a", 1 if s1value="b", etc. 

我不完全理解的是你的意思

 (s1 || s2) 

你想做这样的事吗?

  int s1Value = 0; int s2Value = 0; String s1 = "g"; String s2 = "a"; char s1char = s1.charAt(0); char s2char = s2.charAt(0); int myChar = Math.max(s1char, s2char); s1Value = s2Value = myChar - 'a'; 

UPDATE

在评论中,你写道:

在进入开关之前s1 =“g”和s2 =“g”,那么唯一将评估为真的情况是“g”,因此s1Value和s2Value都将变为6然后退出开关。

所以,我认为你说s1和s2是用相同的值初始化的,所以:

  int s1Value = 0; int s2Value = 0; String s1 = "g"; String s2 = "g"; char s1char = s1.charAt(0); s1Value = s2Value = s1char - 'a'; //s1Value = s2Value = 6 

这应该做你想要的

更新2

s1 =“a”和s2 =“d”我们认为情况“a”,s1 =“c”和s2 =“b”我们认为情况“b”

尝试这个:

  int s1Value = 0; int s2Value = 0; String s1 = "g"; String s2 = "a"; char s1char = s1.charAt(0); char s2char = s2.charAt(0); int myChar = Math.min(s1char, s2char); s1Value = s2Value = myChar - 'a'; 

它应该做的伎俩,测试它,让我知道它是否有效