Пытаюсь писать свою малюсенькую программу и одна из основ - это написание метода, в котором пользователь делает выбор в меню с помощью вводы цифры в консоль, но столкнулся с проблемой, второй день не могу понять, как реализовать код который будет проверять, введено ли число и если введено не число, то через system.out.println чтобы сообщал пользователю о том, что введено не число и давал возможность повторного ввода. Я написал код ниже, понимаю заранее что он не совсем правильный т.к. бесконечно будет выводит первый цикл While, прощу помощи т.к. я очень слаб в джаве.
import java.io.*;
import java.util.Scanner;
public class test {
public static void main(String[] args) {
System.out.println("\nДобро пожаловать\nЧто вас интересует? \n1 - Увидеть текущий список\n2 - Редактировать текущий список");
Scanner scan1 = new Scanner(System.in);
if (!scan1.hasNextInt()) {
while (!scan1.hasNextInt()) {
System.out.println("Вводит необходиу только цифры, попробуйте снова.\n");
}
}
Scanner scan4 = new Scanner(System.in);
int select1 = scan1.nextInt();
if (select1 != 1 || select1 != 2) {
while (select1 != 1 || select1 != 2){
System.out.println("\nВы ввели неверное число, попробуйте снова.");
select1 = scan4.nextInt();
if (select1 == 1) {
}
if (select1 == 2) {
}
}
} else if (select1 == 1) {
System.out.println("Выбран 1 вариант");
} else if (select1 == 2) {
System.out.println("Выбран 1 вариант");
}
}
}
ТС, мыслил в правильном направлении) но можно сделать и проще, чем ответчики выше. Вот мой сохраненный кусок на ввод числа большего либо равного нулю.
int number;
do {
System.out.println("Please enter a positive number!");
while (!sc.hasNextInt()) {
System.out.println("That not a number!");
sc.next();
}
number = sc.nextInt();
} while (number <= 0);
System.out.println("Thank you! Got " + number);
Вот так вы сможете проверять, что на самом деле вводили.
import java.util.Scanner;
public class TestNumbers {
public static boolean isInteger(String s) {
if(s.isEmpty()) return false;
for(int i = 0; i < s.length(); i++) {
if(i == 0 && s.charAt(i) == '-') {
if(s.length() == 1) return false;
else continue;
}
if(Character.digit(s.charAt(i),10) < 0) return false;
}
return true;
}
public static void main(String[] args) {
System.out.println("\nДобро пожаловать\nЧто вас интересует? \n1 - Увидеть текущий список\n2 - Редактировать текущий список");
String result;
Integer choice;
Scanner scan1 = new Scanner(System.in);
while (true) {
result = scan1.next();
if (isInteger(result)) {
choice = Integer.valueOf(result);
if (choice == 1 || choice == 2) {
break;
}
System.out.println("Вводит необходиу только цифры 1 и 2, попробуйте снова.\n");
} else {
System.out.println("Вводит необходиу только цифры 1 и 2, попробуйте снова.\n");
}
}
System.out.println("Выбран " + choice + " вариант");
}
}
Читайте строку и проверяйте - число это или нет. Самый просто способ - это парсить его и ловить NumberFormatException
. Логика на try-catch это не очень хорошо, но в случае с парсингом числа я считаю очень даже оправдана в общем случае (в вашем же, раузмеется можно просто делать проверку вида line.equals("1")
или line.equals("2")
):
public static void main(String args []){
System.out.println("\nДобро пожаловать\nЧто вас интересует? \n1 - Увидеть текущий список\n2 - Редактировать текущий список");
Scanner scanner = new Scanner(System.in);
Integer value = null;
boolean correctValue;
do {
correctValue = true;
String line = scanner.nextLine().trim();
try {
value = Integer.parseInt(line);
if(value != 1 && value != 2){
System.out.println("\nВы ввели неверное число, попробуйте снова.");
correctValue = false;
}
} catch (NumberFormatException e){
correctValue = false;
System.out.println("Вводить необходимо только цифры, попробуйте снова.\n");
}
} while (!correctValue);
System.out.println("Выбран " + value + " вариант");
}
В итоге, в процессе написания программы, я пришёл к тому, что мне нужен универсальный метод, в который приходит числовая переменная, означающая сколько пунктов условно говоря будет в меню, делает проверку на то, что введена ли цифра или буква, если всё ок - то проверяет, чтобы введённая пользователем цифра была не меньше 1 и не больше входной переменной в метод и если все проверки прошли успешно, то метод возвращает переменную, которую ввёл пользователь. Созданием этого метода я убил нескольких зайцев одновременно: Упростил значительно работу метода, сократил количество строк в методе, ну и самое главное - научил метод адаптироваться под изменение количества условных пунктов меню (их может быть хоть 5 хоть 50)
public static int SelectMenu (int r) {
boolean CorrectValue;
int result = 0;
do {
try {
CorrectValue = true;
Scanner scan1 = new Scanner(System.in);
int select2 = scan1.nextInt();
if (select2 < 1 | select2 > r) {
System.out.println("Вы ввели неверную цифру, попробуйте ещё раз.");
CorrectValue = false;
} else {
result = select2;
}
} catch (InputMismatchException e) {
CorrectValue = false;
System.out.println("Вводить необходимо только цифры! \nПопробуйте ещё раз");
}
} while (!CorrectValue);
return result;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Разрабатываю будильник для ознакомления со сферой разработки для AndroidПроблема в следующем: не работает будильник
В приложении всегда используется стандартные темы ThemeMaterial
Есть страница contentFinal, которая загружается в WebView через фильтры JsoupВ загруженной странице есть ссылки, ведущие на другие страницы сайта