在java中重构大型if-else语句

在java中重构大型if-else语句,java,if-statement,refactoring,Java,If Statement,Refactoring,我正在尝试重构一些代码,以便尽可能不使用大型if/elseif语句 代码如下: if (Character.getNumericValue(num) == 0 ) { return bar0; } else if (Character.getNumericValue(num) == 1 ) { return bar1; } else if (Character.getNumericValue(num) == 2 ) {

我正在尝试重构一些代码,以便尽可能不使用大型if/elseif语句

代码如下:

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;
    }
基本上,它检查charnum是否等于int 0-9,然后返回相关的数字条(类型为string)。有没有办法让这更好

我希望是这样的

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

如果这有道理的话

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

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

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

您可以拥有一个条形阵列,
条形
,该方法将根据您传递的索引返回
条形
元素

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

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

您可以拥有一个条形阵列,
条形
,该方法将根据您传递的索引返回
条形
元素

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

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

您可以拥有一个条形阵列,
条形
,该方法将根据您传递的索引返回
条形
元素

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

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

您可以创建一个数组来保存条形图值:

Bar[] arr = {bar0,.....,bar9};
int numb = Character.getNumericValue(num);
if(numb < 0 || numb >= arr.length){
   return bar10;
}
else {
   return arr[numb];
}
Bar[]arr={bar0,…,bar9};
int numb=Character.getNumericValue(num);
如果(numb<0 | | numb>=arr.length){
返回棒10;
}
否则{
返回arr[numb];
}

您可以创建一个数组来保存条形图的值:

Bar[] arr = {bar0,.....,bar9};
int numb = Character.getNumericValue(num);
if(numb < 0 || numb >= arr.length){
   return bar10;
}
else {
   return arr[numb];
}
Bar[]arr={bar0,…,bar9};
int numb=Character.getNumericValue(num);
如果(numb<0 | | numb>=arr.length){
返回棒10;
}
否则{
返回arr[numb];
}

您可以创建一个数组来保存条形图的值:

Bar[] arr = {bar0,.....,bar9};
int numb = Character.getNumericValue(num);
if(numb < 0 || numb >= arr.length){
   return bar10;
}
else {
   return arr[numb];
}
Bar[]arr={bar0,…,bar9};
int numb=Character.getNumericValue(num);
如果(numb<0 | | numb>=arr.length){
返回棒10;
}
否则{
返回arr[numb];
}

您可以创建一个数组来保存条形图的值:

Bar[] arr = {bar0,.....,bar9};
int numb = Character.getNumericValue(num);
if(numb < 0 || numb >= arr.length){
   return bar10;
}
else {
   return arr[numb];
}
Bar[]arr={bar0,…,bar9};
int numb=Character.getNumericValue(num);
如果(numb<0 | | numb>=arr.length){
返回棒10;
}
否则{
返回arr[numb];
}

创建一个值数组并执行以下操作

if(Character.getNumericaValue(num) < 10) {
    return array[Character.getNumericaValue(num)];
} else {
    return bar10;
}
if(Character.getNumericaValue(num)<10){
返回数组[Character.getNumericaValue(num)];
}否则{
返回棒10;
}

当然,如果您确定
num
将不小于0。

创建一个值数组并执行以下操作

if(Character.getNumericaValue(num) < 10) {
    return array[Character.getNumericaValue(num)];
} else {
    return bar10;
}
if(Character.getNumericaValue(num)<10){
返回数组[Character.getNumericaValue(num)];
}否则{
返回棒10;
}

当然,如果您确定
num
将不小于0。

创建一个值数组并执行以下操作

if(Character.getNumericaValue(num) < 10) {
    return array[Character.getNumericaValue(num)];
} else {
    return bar10;
}
if(Character.getNumericaValue(num)<10){
返回数组[Character.getNumericaValue(num)];
}否则{
返回棒10;
}

当然,如果您确定
num
将不小于0。

创建一个值数组并执行以下操作

if(Character.getNumericaValue(num) < 10) {
    return array[Character.getNumericaValue(num)];
} else {
    return bar10;
}
if(Character.getNumericaValue(num)<10){
返回数组[Character.getNumericaValue(num)];
}否则{
返回棒10;
}

当然,如果您确定
num
将不小于0。

什么是
bar0
bar10

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

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

int numericValue = Character.getNumericValue(num);
if (numericValue >= 0 && numericValue <= 9) {
    return bars[numericValue];
} else {
    return bar10;
}
String[]bar={bar0,bar1,…};//等
int numericValue=Character.getNumericValue(num);

如果(numericValue>=0&&numericValue什么是
bar0
bar10

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

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

int numericValue = Character.getNumericValue(num);
if (numericValue >= 0 && numericValue <= 9) {
    return bars[numericValue];
} else {
    return bar10;
}
String[]条={bar0,bar1,…};//等。
int numericValue=Character.getNumericValue(num);

如果(numericValue>=0&&numericValue什么是
bar0
bar10

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

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

int numericValue = Character.getNumericValue(num);
if (numericValue >= 0 && numericValue <= 9) {
    return bars[numericValue];
} else {
    return bar10;
}
String[]条={bar0,bar1,…};//等。
int numericValue=Character.getNumericValue(num);

如果(numericValue>=0&&numericValue什么是
bar0
bar10

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

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

int numericValue = Character.getNumericValue(num);
if (numericValue >= 0 && numericValue <= 9) {
    return bars[numericValue];
} else {
    return bar10;
}
String[]条={bar0,bar1,…};//等。
int numericValue=Character.getNumericValue(num);

if(numericValue>=0&&numericValue如果barN的值在执行过程中发生变化,他必须在每次执行if语句时构建此数组。在这种情况下,switch语句更有效。@irabakter OP应该将每个
barN
重构为
条[n]
,包括更新。维护一组十个索引变量本身就是一种味道。在我的情况下,它们不会改变,所以这是可行的。但是如果我确实需要改变它,我可以向数组中添加另一个字符串。如果barN的值在执行过程中发生变化,他每次执行if语句时都必须构建此数组。在这种情况下,开关语句更有效。@IraBaxter OP应该将每个
barN
重构为
条[n]
,包括更新。维护一组十个索引变量本身就是一种味道。在我的情况下,它们不会改变,所以这是可行的。但是如果我确实需要改变它,我可以向数组中添加另一个字符串。如果barN的值在执行过程中发生变化,他每次执行if语句时都必须构建此数组。在这种情况下,开关语句更有效。@IraBaxter OP应该将每个
barN
重构为
条[n]
,包括更新。维护一组十个索引变量本身就是一种味道。在我的情况下,它们不会改变,所以这是可行的。但是如果我确实需要改变它,我可以向数组中添加另一个字符串。如果barN的值在执行过程中发生变化,他每次执行if语句时都必须构建此数组。在这种情况下,开关声明更有效。@IraBaxter OP应该将每个
barN
重构为
bar[n]
,包括