Кто может дать мне какое-то руководство? 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()/ попробовать поймать логическое значение"
«Принимаются только цифры»
на данный момент
Я предлагаю вам отредактировать заголовок вопроса и сделать его более конкретным, чтобы помочь другим, у кого может возникнуть подобный случай в будущем, и которые смогут легко найти этот вопрос.
Ниже код работает нормально.
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)
Пожалуйста, прочитайте код еще раз. Возможно, вы используете int operation = input.nextInt()
вместо String operationString = myObj.nextLine()
Я сделал это, но когда я ввожу int, это не продолжается. :(
Я проверил приведенный ниже код на ваш вопрос, он работает.
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();
}
}
Не можете использовать hasNextInt()/try-catch boolean?