Руководство по проверке ввода в Java

Кто может дать мне какое-то руководство? XD

Я пытаюсь заставить свою программу избежать «неожиданной» ошибки.

System.out.println("Select the operation to perform: \n1. Addition \n2. Subtraction \n3. Multiplication \n4. Division");
Scanner input = new Scanner(System.in);
int operation = input.nextInt();
input.nextLine();
String operationName = "";
String anotherOperation = "";

if (operation == 1) {
    operationName = "Addition";
} else if (operation == 2) {
    operationName = "Subtraction";
} else if (operation == 3) {
    operationName = "Multiplication";
} else if (operation == 4) {
    operationName = "Division";
}

Задача моей программы состоит в том, чтобы избежать использования do- while и switch. До сих пор я использую for/if-else.

В этом случае запрашивается int, но если пользователь вводит что-то другое, например букву или символ (цифры уже покрыты), вместо закрытия программы из-за ошибки я хочу, чтобы она обрабатывала ввод и возвращала результат. сообщение об ошибке: «Разрешены только числа», а затем завершите программу.

Я не уверен, что я это хорошо объяснил.

Вот репозиторий на случай, если вы захотите проверить код. https://github.com/SAFCCFAS/estudio-java/blob/main/Ejercicios/Calculadora.java

"hasNextInt()/ попробовать поймать логическое значение"

«Принимаются только цифры»

на данный момент

Не можете использовать hasNextInt()/try-catch boolean?

Sither Tsering 21.08.2024 06:48

Я предлагаю вам отредактировать заголовок вопроса и сделать его более конкретным, чтобы помочь другим, у кого может возникнуть подобный случай в будущем, и которые смогут легко найти этот вопрос.

Hagelslag 21.08.2024 07:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
51
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ниже код работает нормально.

import java.util.Scanner;

class CheckOperation{
    public static void main(String[] args) {
        Scanner myObj = new Scanner(System.in);
        String operationString = myObj.nextLine();

        String operationName = "";
        //String anotherOperation = "";
        if (operationString .matches("-?\\d+")) {
            int operation = Integer.parseInt(operationString);
            if (operation == 1) {
                 operationName = "Addition";
            } else if (operation == 2) {
                 operationName = "Subtraction";
            } else if (operation == 3) {
                 operationName = "Multiplication";
            } else if (operation == 4) {
                 operationName = "Division";
            }
        } else {
            System.out.println("Only numbers are allowed.");
        }
        System.out.println(operationName);
    }
}

Проблема сохраняется. Выберите операцию, которую необходимо выполнить: Сложение, вычитание, умножение, деление x Исключение в потоке «main» java.util.InputMismatchException в java.base/java.util.Scanner.throwFor(Scanner.java:947) в java.base/java. .util.Scanner.next(Scanner.java:1602) по адресу java.base/java.util.Scanner.nextInt(Scanner.java:2267) по адресу java.base/java.util.Scanner.nextInt(Scanner.java:2221) ) в Calculadora.main(Calculadora.java:10)

Sebastian Alfonso Franco Casti 21.08.2024 06:35

Пожалуйста, прочитайте код еще раз. Возможно, вы используете int operation = input.nextInt() вместо String operationString = myObj.nextLine()

Abdul Alim Shakir 21.08.2024 06:49

Я сделал это, но когда я ввожу int, это не продолжается. :(

Sebastian Alfonso Franco Casti 21.08.2024 07:11
Ответ принят как подходящий

Я проверил приведенный ниже код на ваш вопрос, он работает.

package org.example;

import java.util.Scanner;

public class NewSOQ {
    public static void main(String[] args) {
        System.out.println("Select the operation to perform: \n1. Addition \n2. Subtraction \n3. Multiplication \n4. Division");
        Scanner input = new Scanner(System.in);

        if (input.hasNextInt()) {
            int operation = input.nextInt();
            input.nextLine(); 
            String operationName = "";

            if (operation == 1) {
                operationName = "Addition";
            } else if (operation == 2) {
                operationName = "Subtraction";
            } else if (operation == 3) {
                operationName = "Multiplication";
            } else if (operation == 4) {
                operationName = "Division";
            } else {
                System.out.println("Invalid operation selected.");
                return;
            }

            System.out.println("You selected: " + operationName);

        } else {
            System.out.println("Only numbers are allowed.");
        }

        input.close();
    }
}

Другие вопросы по теме