Обработка исключения InputMismatchException
import java.util.Scanner;
import java.util.InputMismatchException;
public class Main {
public static void main(String[] args) {
while (true) {
try {
Scanner scan = new Scanner(System.in);
int h = scan.nextInt();
} catch (InputMismatchException h) {
System.out.println("Enter number");
}
int i = h - 1;
int j = 2;
if (h >= 0 && h < 23) {
while (h != 0) {
System.out.println(repeat(" ", i) + repeat("#", j));
h--;
i--;
j++;
}
break;
} else
System.out.println("Incorrect");
}
}
public static String repeat(String s, int i) {
String str = "";
for (int j = 0; j < i; j++) {
str = str + s;
}
return str;
}
}
Есть программа которая рисует пирамидку заданной пользователем высоты. Она полностью рабочая, но я решил добавить туда обработку исключения если пользователь введет что-то другое вместо цифры. Как бы я не оформлял его вечно что-то не так. Основная ошибка выходит что в последующих строках кода перестала обнаруживаться переменная h, которую я засунул в блок try. Подскажите пожалуйста как правильно оформить исключение? Желательно чтобы обработка требовала заново и заново ввести данные пока пользователь не введет число. Заранее благодарен
Ответы (2 шт):
Ну самый просто способ - сделать примерно так:
while (true) {
int h;
Scanner scan = new Scanner(System.in);
try {
h = scan.nextInt();
} catch (InputMismatchException ex) {
System.out.println("Enter number");
continue;
}
int i = h - 1;
int j = 2;
if (h >= 0 && h < 23) {
while (h != 0) {
System.out.println(repeat(" ", i) + repeat("#", j));
h--;
i--;
j++;
}
break;
} else
System.out.println("Incorrect");
}
Ваша ошибка в том, что вы объявляли переменную h внутри блока try, а значит за пределами этого блока ее не видно. В целом ваша задача проверить ее на корректность, если нет - то вы просто запускаете след итерацию цикла, если все ок, то выполняете нужные вам действия
public static String repeat(String s, int i) {
//String str = "";
for (int j = 0; j < i; j++) {
String str = str + s;
}
return str;
Еще подскажите пожалуйста: когда я писал метод я изначально не писал вторую строку и он мне выдавал ошибку что строчная переменная не инициализирована (хотя даже пробовал писать её, но без присвоения "", а в выражении соответственно String убирал). Почему так? Ведь она проинициализирована прямо в выражении. Причем выдавал прямо в этом выражении сразу после знака равно. В строке с return то понятно, там видимо эту переменную не видел метод потому что она внутри цикла инициализирована была