Проблема в создании калькулятора, распознающего запрос пользователя
Буквально неделю изучаю java и столкнулся с проблемой в заголовке.
Я сделал калькулятор, распознающий запросы пользователя из массива строки (код ниже).
Сама проблема заключается в том, что я не понимаю, как сделать так, чтобы математическое действие можно было продолжить с результатом, полученным после первого действия.
Например 35+35 = 70, но вместо +70 = 140 нужно писать заново 70+70.
Пытался сделать res = operator[0], но выдает ошибку.
Заранее спасибо за помощь.
П.С. Цикл do-while стоит для того, чтобы программа не завершалась автоматически после первого вычисления.
package com.lumen;
import java.util.Scanner;
public class OneLineCalc {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
double res = 0;
do {
String numbers = scan.nextLine();
String[] operators;
if (numbers.indexOf('+') > 0) {
operators = numbers.split("[+]");
res = Double.parseDouble(operators[0]) + Double.parseDouble(operators[1]);
} else if (numbers.indexOf('-') > 0) {
operators = numbers.split("[-]");
res = Double.parseDouble(operators[0]) - Double.parseDouble(operators[1]);
} else if (numbers.indexOf('*') > 0) {
operators = numbers.split("[*]");
res = Double.parseDouble(operators[0]) * Double.parseDouble(operators[1]);
} else if (numbers.indexOf('/') > 0) {
operators = numbers.split("[/]");
res = Double.parseDouble(operators[0]) / Double.parseDouble(operators[1]);
}
System.out.print(" = " + res);
} while (res < 1000000000);
}
}
Ответы (2 шт):
Например 35+35 = 70, но вместо +70 = 140 нужно писать заново 70+70
Такое нужно?
public class Test {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
double res = 0;
do {
String numbers = scan.nextLine();
String[] operators;
if (numbers.indexOf('+') > -1) {
operators = numbers.split("[+]");
if (operators[0].isEmpty()) operators[0] = operators[1];
res = Double.parseDouble(operators[0]) + Double.parseDouble(operators[1]);
} else if (numbers.indexOf('-') > 0) {
operators = numbers.split("[-]");
res = Double.parseDouble(operators[0]) - Double.parseDouble(operators[1]);
} else if (numbers.indexOf('*') > -1) {
operators = numbers.split("[*]");
if (operators[0].isEmpty()) operators[0] = operators[1];
res = Double.parseDouble(operators[0]) * Double.parseDouble(operators[1]);
} else if (numbers.indexOf('/') > 0) {
operators = numbers.split("[/]");
res = Double.parseDouble(operators[0]) / Double.parseDouble(operators[1]);
} else {
System.out.println("Операция не определена...");
continue;
}
System.out.print(" = " + res + "\n");
} while (res < 1000000000);
}
}
Если требуется реализовать простой калькулятор, обрабатывающий операции последовательно (независимо от математического приоритета операций в выражении), как стандартный калькулятор Windows: 2 + 2 -> 4 * 2 = 8, то проще было бы не ожидать ввода целой строки и разбивать её по знаку операции.
Можно изменить логику следующим образом:
- Ввести первое число (
nextDouble) -- оно может быть и отрицательным - Ввести операцию
+-*/, если введено=, закончить цикл - Уже в цикле ввести следующий операнд (
nextDouble), вычислить и вывести результат операции с новой строки (можно будет использовать более лаконичныйswitchпо виду операции). - Перейти в начало цикла на п.2.
Scanner scan = new Scanner(System.in);
double x = scan.nextDouble();
String op;
while (!"=".equals(op = scan.next())) {
switch (op) {
case "+" -> x += scan.nextDouble();
case "-" -> x -= scan.nextDouble();
case "*" -> x *= scan.nextDouble();
case "/" -> x /= scan.nextDouble();
default -> {
System.out.println("Неизвестная операция '" + op + "'");
}
}
System.out.println(" = " + x);
}
Правда, при таком способе операции должны отделяться пробельными символами и сохраняется возможность отдельного ввода отрицательных чисел:
2 + 3 = 5.0
+ 5 = 10.0
- -2 = 12.0
* -1 = -12.0
/ -2 = 6.0
+ 15 = 21.0
=