Cip*_*hor 9 java variables int logic switch-statement
我正在寻找一种使用单个开关处理两个字符串的方法,我认为这在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;
}
Run Code Online (Sandbox Code Playgroud)
根据您的要求使用单个开关是不可能的.这与您使用Java一样接近.
switch (s1) {
case "a": doAC(); break;
case "b": doBD(); break;
default:
switch(s2) {
case "c": doAC(); break;
case "d": doBD(); break;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您是否考虑过不使用switch语句而是使用查找表?
public class MyClass {
private static final Map<String, Integer> valuesMap;
static {
Map<String,Integer> 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要一组不同的s2Value值,那么您可以构建第二个映射来从中提取这些值。
由于您想使用开关,我认为这意味着可能的候选者和值是固定的,在开发时间列表中已知,因此使用像这样的静态初始化映射应该不是问题。
您可以在不使用开关的情况下做您想做的事情,只需编写:
s1value = s1.charAt(0)-'a'; //returns 0 if s1value="a", 1 if s1value="b", etc.
Run Code Online (Sandbox Code Playgroud)
我不完全明白你的意思是什么
(s1 || s2)
Run Code Online (Sandbox Code Playgroud)
你想做这样的事情吗?
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';
Run Code Online (Sandbox Code Playgroud)
更新
您在评论中写道:
s1="g" 和 s2="g" 在进入开关之前,那么唯一评估为 true 的情况是情况“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
Run Code Online (Sandbox Code Playgroud)
这应该做你想做的
更新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';
Run Code Online (Sandbox Code Playgroud)
它应该可以解决问题,测试它并让我知道它是否有效
| 归档时间: |
|
| 查看次数: |
42267 次 |
| 最近记录: |