Java. Как ввести несколько переменных:2 числа int и знак (+,-,*,/) в одной строке и считать их с помощью Scanner
Только начинаю покорять Java, пишу простенький калькулятор. Задание, чтобы данные для вычисления передавались в одну строку, например: 1 + 2 Пробовал следующим образом:
import java.util.Scanner;
public class Calculator {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("Введите выражение используя +, -, *, /");
int num1 = getInt();
char operation = getOperation();
int num2 = getInt();
int result = calc(num1, operation, num2);
System.out.println("Результат операции: " + result);
}
public static int getInt() {
int num;
if (scanner.hasNextInt()) {
num = scanner.nextInt();
} else {
System.out.println("Вы допустили ошибку при вводе числа. Попробуйте еще раз.");
scanner.next();//рекурсия
num = getInt();
}
return num;
}
public static char getOperation() {
char operation;
if (scanner.hasNext()) {
operation = scanner.next().charAt(0);
} else {
System.out.println("Вы допустили ошибку при вводе операции. Попробуйте еще раз.");
scanner.next();//рекурсия
operation = getOperation();
}
return operation;
}
public static int calc(int num1, char operation, int num2) {
int result;
switch (operation) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
default:
System.out.println("Операция не распознана. Повторите ввод.");
result = calc(num1, getOperation(), num2);//рекурсия
}
return result;
}
}
Ответы (1 шт):
Автор решения: Vasily Mikhaylov
→ Ссылка
Если нужно бы было принимать строку, которая была вида, допустим 5 + 5.
Можно бы было сделать регулярные выражение с группами захвата.
Pattern p = Pattern.compile("(\\d)[\+\-\*\/]?(\\d)");
Matcher m = p.matcher(scanner.next());
m.group(0); - будет содержать первое число
m.group(1); - операнд
m.group(2); - второе число
Значение из групп захвата можно вынести в переменные и использовать в своих методах, как захочешь.
С помощью Matcher можно так же проверять строку на соответствие регулярному выражению.
То есть проверить ввёл ты - "2*5" или "fgdfgf"