Чтобы сделать так, чтобы ваш калькулятор принимал на вход числа только от 1 до 10 включительно, и строки длиной не более 10 символов, вам нужно добавить соответствующие проверки в ваш код. Вот модифицированная версия вашего кода с этими проверками:
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner(System.in);
String exp = scn.nextLine();
// Проверка длины строки
if (exp.length() > 10) {
throw new Exception("Вводная строка не должна быть длиннее 10 символов");
}
char action = getAction(exp);
String[] data = getData(exp, action);
// Проверка значений чисел
for (String datum : data) {
int number = Integer.parseInt(datum);
if (number < 1 || number > 10) {
throw new Exception("Числа должны быть от 1 до 10 включительно");
}
}
String result = calculateResult(action, data);
printInQuotes(result);
}
static char getAction(String exp) throws Exception {
if (exp.contains(" + ")) {
return '+';
} else if (exp.contains(" - ")) {
return '-';
} else if (exp.contains(" * ")) {
return '*';
} else if (exp.contains(" / ")) {
return '/';
} else {
throw new Exception("Некорректный знак действия");
}
}
static String[] getData(String exp, char action) {
String[] data;
switch (action) {
case '+':
data = exp.split(" \\+ ");
break;
case '-':
data = exp.split(" - ");
break;
case '*':
data = exp.split(" \\* ");
break;
case '/':
data = exp.split(" / ");
break;
default:
data = new String[0];
}
return data;
}
static String calculateResult(char action, String[] data) throws Exception {
int a = Integer.parseInt(data[0]);
int b = Integer.parseInt(data[1]);
int result;
switch (action) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if (b == 0) {
throw new Exception("Деление на ноль");
}
result = a / b;
break;
default:
throw new Exception("Некорректное действие");
}
return String.valueOf(result);
}
static void printInQuotes(String result) {
System.out.println("\"" + result + "\"");
}
}
В этом коде добавлены следующие проверки:
1. Проверка длины вводной строки: если длина строки больше 10 символов, выбрасывается исключение.
2. Проверка значений чисел: если любое из чисел выходит за пределы от 1 до 10 включительно, выбрасывается исключение.
Таким образом, ваш калькулятор будет работать только с числами в заданном диапазоне и строками не длиннее 10 символов.
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner( System.in );
String exp = scn.nextLine();
char action = getAction(exp);
String[] data = getData(exp, action);
if (action == '*' || action == '/') {
validateMultiplicationOrDivision(data[1]);
}
for (int i = 0; i < data.length; i++) {
data[i] = data[i].replace("\"", "");
}
String result = calculateResult(action, data);
printInQuotes(result);
}
static char getAction(String exp) throws Exception {
if (exp.contains(" + ")) {
return '+';
} else if (exp.contains(" - ")) {
return '-';
} else if (exp.contains(" * ")) {
return '*';
} else if (exp.contains(" / ")) {
return '/';
} else {
throw new Exception("Некорректный знак действия");
}
}
static String[] getData(String exp, char action) {
String[] data;
switch (action) {
case '+':
data = exp.split(" \\+ ");
break;
case '-':
data = exp.split(" - ");
break;
case '*':
data = exp.split(" \\* ");
break;
case '/':
data = exp.split(" / ");
break;
default:
data = new String[0];
}
return data;