Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите найти и исправить ошибку в Java коде.

Илья Воеводин Знаток (494), на голосовании 1 год назад
Никаких ошибок не пишет. Ввод уравнения (5 6+3*22-) проходит нормально, но ответ выдаёт 5. А ответ должен быть 11. Вот код:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner( System.in );
String rpn;

boolean divisionByZero = false;

while (true) {
System.out.print("Enter an arithmetic expression: ");
rpn = scanner.nextLine();

if (rpn.equals("")) {
break;
}

String[] tokens = rpn.split(" ");
int top = -1;
double[] stack = new double[tokens.length];

for (String token : tokens) {
if (token.matches("-?\\d+(\\.\\d+)?")) {
stack[++top] = Double.parseDouble(token);
} else if (token.equals("+")) {
stack[top - 1] += stack[top];
top--;
} else if (token.equals("-")) {
stack[top - 1] -= stack[top];
top--;
} else if (token.equals("*")) {
stack[top - 1] *= stack[top];
top--;
} else if (token.equals("/")) {
if (stack[top] == 0.0) {
divisionByZero = true;
break;
} else {
stack[top - 1] /= stack[top];
top--;
}
} else if (token.equals("^")) {
stack[top - 1] = Math.pow(stack[top - 1], stack[top]);
top--;
}
}

if (divisionByZero) {
System.out.println("Division by zero!");
divisionByZero = false;
continue;
} else {
System.out.printf("\nResult: %f\n\n", stack[0]);
}
}

scanner.close();
}
}
Голосование за лучший ответ
Александр Искусственный Интеллект (292523) 1 год назад
ты строку по пробелам рвёшь на токены..
ну так и вводи с пробелами
 5 6 + 3 * 22 -
или вставляй пробелы где нужно программным образом...
или изобретай регулярку, которая тебе порвёт всё как надо в любом виде...
по условию задания ничего разве не ясно?
Похожие вопросы