2016-06-30 8 views
-3

Я начинаю java, и я изучаю инструкцию switch. Я понимаю, как работает оператор switch, но когда я пытаюсь преобразовать из switch в if/else, я получил неправильный ответ. И я не мог решить проблему?Если else и switch statment

Это переключатель Постулаты

switch (y) 
{ 
    case '+': 
    case '-': 
     checkPrecedence(y, 1); 
     break; 
    case '*': 
    case '/': 
     checkPrecedence(y, 2); 
     break; 
    case '(': 
     opStack.push(y); 
     break; 
    case ')': 
     checkBrackets(); 
     break; 
    default: 
     output = output + y; 
     break; 

мой, если/иначе Постулаты

if (y == '+' || y == '_') { 
    checkPrecedence(y, 1); 
} 
else if (y == '*' || y == '/') { 
    checkPrecedence(y, 2); 
} 
else if (y == '(') { 
    opStack.push(y); 
} 
else if (y == ')') { 
    checkBrackets(); 
} 
output = output + y; 
+0

Какой тип y? Строка? Int? – Lexi

+2

у вас есть неправильный ответ? что это значит? он не компилируется, он не запускается, или ваш профессор сказал вам попробовать еще раз ...? для начала ваш оператор 'switch' имеет' default', но ваш 'if', кажется, не имеет своего' else'. вы также сравниваете с '-' в коммутаторе, но это, похоже, опечаталось в' _' в вашем if. – trooper

+0

Почему некоторые из ваших утверждений о случаях не имеют перерывов? каждый случай должен иметь перерыв; Кроме того, ваш оператор else else if должен, вероятно, быть инструкцией else, которая выполняется, если все утверждения перед ним являются ложными. – Radmation

ответ

2

Вы забыли последний еще:

if(y=='+'||y=='-'){ 
    checkPrecedence(y,1); 
    } 
else if(y=='*'||y=='/'){ 
    checkPrecedence(y,2); 
} 
else if(y=='('){ 
    opStack.push(y); 
    } 
else if(y==')'){ 
    checkBrackets(); 
} else { 
    output=output+y; 
} 

EDIT

и сделал упомянутый (по Eagle-Eye Мик Мнемоник) опечатка с знаком минус

+0

Если вы собираетесь просто дать им ответ, пожалуйста, по крайней мере, объясните, почему это так. –

+0

Я думал, что разница с опцией по умолчанию была слишком очевидной, если я на нее указываю – Turo

+0

@Turo Согласен. Ошибка слишком проста для объяснения, до такой степени, что если бы вы попытались объяснить это, вы бы только объяснили общую функциональность контрольных операторов. – nasukkin

-3

Если строка использовать String.equals для сравнения

if(y.equals("+") || y.equals("_")) { 
    checkPrecedence(y,1); 
} 

Это, вероятно, ваша ошибка. Предполагая, что вы не используете int или char, который ... Помогло бы, если бы мы знали тип данных

+1

вряд ли будет проблемой. эти одинарные кавычки означают, что y является «char». http://stackoverflow.com/questions/439485/is-there-a-difference-between-single-and-double-quotes-in-java – trooper

+0

Я заметил, что с тех пор, как он использовал в коммутаторе ... но приятно знать, что такое тип данных .. Обратите внимание, как я сказал, если строка сначала ... –

+0

Если 'y' в' '(y)' или 'if (y == '+')' будет String, тогда OP wouldn 't быть в состоянии скомпилировать 'case' + '' или '==' + ''. Это должен быть символ 'char' (или символ или другой числовой тип, который может быть передан в char), но поскольку он не может быть String, я не вижу смысла публиковать ответ об этом. – Pshemo

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