Повторное приглашение после исключения в Java

76
5

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

private static float baseLength() {
float baseLength = 0;
Scanner user_input = new Scanner(System.in);
try {
while (baseLength <= 0) {
System.out.print("Enter the base length of the triangle: ");
baseLength = user_input.nextFloat();
if (baseLength <=0) {
System.out.println("Error. Plase enter a number higher than 0.");
}
}
} catch (InputMismatchException badChar) {
System.err.println("You have entered a bad value. Please try again");
baseLength();
}
return baseLength;

Он будет восстанавливаться с плохих чисел, но не из значения, которое не является числом. Я до сих пор не могу понять, в чем проблема.

спросил(а) 2021-01-25T14:53:41+03:00 4 месяца, 4 недели назад
1
Решение
63

Вы можете поместить while цикл вокруг блока Try/уловов для достижения этой цели:


private static float baseLength() {
float baseLength = 0;
Scanner user_input = new Scanner(System.in);
while (baseLength <= 0) {
try {
System.out.print("Enter the base length of the triangle: ");
baseLength = user_input.nextFloat();
if (baseLength <= 0) {
System.out.println("Error. Plase enter a number higher than 0.");
}
} catch (InputMismatchException badChar) {
System.err.println("You have entered a bad value. Please try again");
}
}
return baseLength;
}

ответил(а) 2021-01-25T14:53:41+03:00 4 месяца, 4 недели назад
45

с более ясными проверками и исключением внутри основного цикла, а также с любыми ошибками с System.err

private static float baseLength() {
float baseLength = 0;

while (true)
{
try {
System.out.print("Enter the base length of the triangle: ");

Scanner user_input = new Scanner(System.in);
baseLength = user_input.nextFloat();

if (baseLength>0)
return baseLength;

if (baseLength <=0)
System.err.println("Error. Plase enter a number higher than 0.");
}
catch (InputMismatchException badChar)
{
System.err.println("You have entered a bad value. Please try again");
}
}
}

ответил(а) 2021-01-25T14:53:41+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема