Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中使用变量赋值实现if/else分支的更有效方法_Java_Performance_If Statement - Fatal编程技术网

在Java中使用变量赋值实现if/else分支的更有效方法

在Java中使用变量赋值实现if/else分支的更有效方法,java,performance,if-statement,Java,Performance,If Statement,变量“varOptions”通过扫描仪获得。基本上,我想:[A,B,C,D,E,F]变成:[0,1,2,3,4,5]。代码不区分大小写也是非常重要的。目前,这段代码相当庞大。我想知道是否有办法使这更有效 if ("A".equalsIgnoreCase(varOptions)) { int varOpt = 0; } else if ("B".equalsIgnoreCase(varOptions)) { int varOpt = 1; }

变量“varOptions”通过扫描仪获得。基本上,我想:
[A,B,C,D,E,F]
变成:
[0,1,2,3,4,5]
。代码不区分大小写也是非常重要的。目前,这段代码相当庞大。我想知道是否有办法使这更有效

    if ("A".equalsIgnoreCase(varOptions)) {
        int varOpt = 0;
    } else if ("B".equalsIgnoreCase(varOptions)) {
        int varOpt = 1;
    } else if ("C".equalsIgnoreCase(varOptions)) {
        int varOpt = 2;
    } else if ("D".equalsIgnoreCase(varOptions)) {
        int varOpt = 3;
    } else if ("E".equalsIgnoreCase(varOptions)) {
        int varOpt = 4;
    } else if ("F".equalsIgnoreCase(varOptions)) {
        int varOpt = 5;
    }

如果varOptions变量尚未转换为字符(与字符串相反),请将其转换为字符。一旦它是一个字符,您就可以将其转换为整数,这将把字符转换为ASCII码。“A”字符的ASCII码为65。B是66岁。C是67等等

要保持不区分大小写,请先将字符转换为大写,然后再转换为整数

因此,将其转换为整数后,只需减去65,就会得到一个介于0和5之间的数字:

int varOpt = (int)Character.toUppercase(varOptions);
varOpt -= 65;
上面的代码假设varOptions已经是char类型。注意,不需要将大小写转换为int,但提高了可读性。人们可以很容易地做到:

int varOpt = Character.toUppercase(varOptions);
完整代码示例,假设varOptions是字符串:

char varOptChar = varOptions.charAt(0); // grab first character
int varOpt = (int)Character.toUppercase(varOptChar);
varOpt = varOpt - 65;

对于您的示例,varOpt现在应该介于0和5之间。要理解这一点,您需要了解字符在计算机中具有十进制表示。计算机只看到数字65,但知道该数字表示大写字母A。65称为ASCII码;您可以在这里找到一个ASCII代码表:

它没有那么漂亮,但您可以这样做

Map<String, Integer> map = new HashMap<String, Integer>()
{{
   put("A", 1);
   put("B", 2);
   put("C", 3);
   put("D", 4);
   put("E", 5);
   put("F", 6);
}};

// varOpt will be null if it is not in the map
int varOpt = map.get(varOptions.toUpperCase());
Map Map=newhashmap()
{{
付诸表决(“A”,1);
付诸表决(“B”,2);
put(“C”,3);
付诸表决(“D”,4);
付诸表决(“E”,5);
付诸表决(“F”,6);
}};
//如果varOpt不在映射中,则它将为null
int varOpt=map.get(varOptions.toUpperCase());

您还可以在
字符串上使用
开关

int varOpt;
switch( varOptions.toUpperCase() ) {
    case "A":
        varOpt = 0; break;
    case "B":
        varOpt = 1; break;
    // etc
}
或者使用
映射
,如果您不想在连续范围内进行简单的字符到整数映射,那么可以使用
映射。

如何:

int varOpt = " ABCDEF".indexOf(varOptions.toUpperCase());

另一种方法是将字母解析为十六进制数,然后减去11:

int varOpt = Integer.parseInt(varOptions, 16) - 0xA;

地图查找是显而易见的方法。这只是针对那些特定的值吗?“G”怎么了?此外,这听起来更适合于代码审查。您是否有一个您试图解决的效率问题?如果输入不是a-F,会发生什么,或者不会发生什么?您能给我一个您所说的代码示例吗?很抱歉“我对Java语法不是很熟悉。”乔纳森·穆斯利补充道!代码本身并不复杂,但如果您不熟悉ASCII代码,我可以看出这可能会令人困惑。我试图补充一个简短的解释。@JonathanMousley没问题!我建议不要写
-65
,而是写
-'A'
,这样你就不需要ASCII表来理解代码了。我从来没有见过这种双花括号表示法。这是否会创建一个具有附加静态初始值设定项的HashMap匿名子类?@Teto-yup。人们通常也会因为以下几个原因而不鼓励使用DBI——“每次使用DBI,都会有一只小猫被杀。”
int varOpt = " ABCDEF".indexOf(varOptions.toUpperCase());
int varOpt = Integer.parseInt(varOptions, 16) - 0xA;