2014-01-28 4 views
0

Я пытаюсь реорганизовать некоторый код, поэтому, если возможно, у меня нет большого if if else.рефакторинг большого, если остальное satement в java

Вот код:

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; 
    } 

В основном он проверяет символ Num равно к Int 0-9, затем возвращает связанный с ним номера бар (который имеет тип строки). Есть ли способ сделать это лучше?

Я хотел бы, чтобы это было что-то вроде

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

, если это имеет смысл.

ответ

3

Создать массив значений и сделать что-то вроде

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

, конечно, если вы уверены, что num не будет менее 0.

+0

Если значения barN изменяются во время выполнения, ему приходится строить этот массив каждый раз, когда он будет выполнять оператор if. В этом случае оператор switch более эффективен. –

+2

@IraBaxter OP должен реорганизовать каждый 'barN' на' bars [n] ', включая обновления. Поддержание набора из десяти индексированных переменных само по себе является запахом. –

+0

В моем случае они не изменятся, так что это работает. Но да, если мне нужно было его изменить, я мог бы добавить еще одну строку в массив. – sire

0

У вас может быть массив бара, bars, и метод вернет элемент bar на основе индекса, который вы передадите.

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

Обязательно покрыть все кромки в соответствии с вашими требованиями.

0

Вы можете создать массив, который будет содержать ваши значения полосы:

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

заявление переключатель, как быть более эффективным. –

0

Что такое bar0 до bar10?

Вы можете сделать это с помощью массива, отрываясь нужный элемент:

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

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

'bar0' - первый бар, где вы пейте пиво в пятницу вечером ...' barX' - это следующая серия: – vikingsteve

+0

Это тоже сработало, но выбранный ответ был более кратким. И bar0 - bar9 представляет собой код POSTNET для печати с номером 0-9. Например: 'bar0 =" || ::: ";', а bar10 - всего лишь строка, возвращающая ошибку, если метод получил недопустимый символ. – sire

+0

То, что я имел в виду, было: «what * type *' bar0' to 'bar10'?», По-видимому, это 'String'. – Jesper

Смежные вопросы