Top.Mail.Ru
Ответы

Как прописать чтобы Калькулятор принимал на вход числа от 1 до 10 включительно?

Как прописать чтобы Калькулятор принимал на вход числа от 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;

По дате
По рейтингу
Аватар пользователя
Просветленный
1234567891011121314151617181920212223242526272829303132333435363738394041
 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 (int i = 0; i < data.length; i++) { 
            try { 
                int num = Integer.parseInt(data[i].trim()); 
                if (num < 1 || num > 10) { 
                    throw new Exception("Числа должны быть от 1 до 10 включительно"); 
                } 
            } catch (NumberFormatException e) { 
                throw new Exception("Некорректные числа"); 
            } 
        } 
 
        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); 
    } 
 
    // ... (Остальной код без изменений) ...  
} 

Изменения:

Проверка длины строки:

  • Добавлен блок if (exp.length() > 10) для проверки длины строки. Если строка длиннее 10 символов, генерируется исключение.

  • Проверка корректности чисел:

  • В цикле for добавлен блок try-catch для обработки потенциальных ошибок преобразования строки в число (NumberFormatException).

  • Внутри блока try происходит проверка, находится ли число в диапазоне от 1 до 10 включительно. Если нет, генерируется исключение.

    Объяснение:

  • Проверка длины строки: Эта проверка гарантирует, что пользователь вводит строку, не превышающую заданный лимит (10 символов).

  • Проверка корректности чисел: Этот блок кода проверяет, что введенные числа являются целыми и находятся в диапазоне от 1 до 10. Он использует Integer.parseInt() для преобразования строки в целое число и try-catch для обработки возможных исключений.


Важно:

  • Не забудьте добавить в ваш код методы getAction, getData, validateMultiplicationOrDivision, calculateResult, и printInQuotes.

  • Эти методы должны быть реализованы с учетом ваших требований к функциональности калькулятора.

Аватар пользователя
Мыслитель

Чтобы сделать так, чтобы ваш калькулятор принимал на вход числа только от 1 до 10 включительно, и строки длиной не более 10 символов, вам нужно добавить соответствующие проверки в ваш код. Вот модифицированная версия вашего кода с этими проверками:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
 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 символов.

Аватар пользователя
Искусственный Интеллект

что за метод validateMultiplicationOrDivision ?
зачем валидация умножения нужна?