在java中重构大的if else语句

时间:2014-01-28 10:31:07

标签: java if-statement refactoring

我正在尝试重构一些代码,所以如果可能的话,我没有大的if / else if语句。

以下是代码:

if (Character.getNumericValue(num) == 0 ) {
        return bar0;
    }
    else if (Character.getNumericValue(num) == 1 ) {
        return bar1;
    }
    else if (Character.getNumericValue(num) == 2 ) {
        return bar2;
    }
    else if (Character.getNumericValue(num) == 3 ) {
        return bar3;
    }
    else if (Character.getNumericValue(num) == 4 ) {
        return bar4;
    }
    else if (Character.getNumericValue(num) == 5 ) {
        return bar5;
    }
    else if (Character.getNumericValue(num) == 6 ) {
        return bar6;
    }
    else if (Character.getNumericValue(num) == 7 ) {
        return bar7;
    }
    else if (Character.getNumericValue(num) == 8 ) {
        return bar8;
    }
    else if (Character.getNumericValue(num) == 9 ) {
        return bar9;
    }
    else {
        return bar10;
    }

基本上它检查char num是否等于int 0-9,然后返回关联的数字栏(字符串类型)。有没有办法让这更好?

我希望它像

if (Character.getNumericaValue(num) == x {
   return barx;
}
else 
   return bar10;

如果这是有道理的。

4 个答案:

答案 0 :(得分:3)

创建一个值数组并执行类似

的操作
if(Character.getNumericaValue(num) < 10) {
    return array[Character.getNumericaValue(num)];
} else {
    return bar10;
}

当然,如果你确定num不会小于0。

答案 1 :(得分:0)

您可以拥有一个数组bars,该方法将根据您传递的索引返回bar元素。

public bar getBar(num){
    return bars[Character.getNumericValue(num)];
}

确保根据您的要求覆盖所有边缘情况。

答案 2 :(得分:0)

您可以创建一个包含条形值的数组:

Bar[] arr = {bar0,.....,bar9};
int numb = Character.getNumericValue(num);
if(numb < 0 || numb >= arr.length){
   return bar10;
}
else {
   return arr[numb];
}

答案 3 :(得分:0)

bar0bar10究竟是什么?

您可以使用数组来查找所需的元素:

String[] bars = { bar0, bar1, ... };  // etc.

int numericValue = Character.getNumericValue(num);
if (numericValue >= 0 && numericValue <= 9) {
    return bars[numericValue];
} else {
    return bar10;
}