Как сделать так, чтобы моя программа могла обрабатывать другие символы, вводимые пользователями? в то время как / примерочных улов? (Джава)
Я новичок в программировании и в настоящее время я пишу меню для банка.
Пользователь может выбирать, является ли он / она администратором или клиентом, нажимая 1 или 2. Я хочу написать код так, чтобы, если пользователь вводит другие символы, кроме ints
Программа отправит сообщение об ошибке и позволит пользователю выбрать снова.
До сих пор мне удалось только заставить программу обрабатывать другие целые числа, кроме 1 и 2, используя while
петля.
Я думаю, что я должен, вероятно, использовать try
а также catch
, но я не могу заставить его работать. Я отметил, где я попробовал try
/catch
напичкать //----------
,
сообщение об ошибке, когда пользователь вводит X вместо числа:
run:
Press 1 to login as customer or 2 to login as admin x
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at bank.Bank.main(Bank.java:32)
Java Result: 1
BUILD SUCCESSFUL (total time: 5 seconds)
public class Bank {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int ChoiceOne;
int CustpNr;
int CustChoice;
int AdminpNr;
int AdminChoice;
System.out.print("Press 1 to login as customer or 2 to login as admin ");
ChoiceOne = input.nextInt();
while (ChoiceOne != 1 && ChoiceOne != 2) {
// ---------------
try {
ChoiceOne = input.nextInt();
} catch (Exception e) {
continue;
}
// ----------------
System.out.print(" Wrong number. Press 1 to login as customer or 2 to login as admin ");
ChoiceOne = input.nextInt();
}// ends while
// The code below generates a menu for the customer if the user chooses 1
// and a meny for the admin if the user chooses 2.
if (ChoiceOne == 1) {
System.out.print("Welcome customer. Please login by using your birthdate (yymmdd) ");
CustpNr = input.nextInt();
boolean quit = false;
do {
System.out.println("1. deposit money");
System.out.println("2. Withdraw money");
System.out.println("3. Check balance");
System.out.print("Your choice, 0 to quit: ");
CustChoice = input.nextInt();
switch (CustChoice) {
case 1:
// deposit money
break;
case 2:
// withdraw money
break;
case 3:
// Check balance and accounts
break;
case 0:
quit = true;
break;
default:
System.out.println("Wrong choice.");
break;
}
System.out.println();
} while (!quit);
System.out.println("Bye!");
} else if (ChoiceOne == 2) {
System.out.print("Welcome Admin. Please login using your birthdate (yymmdd) ");
AdminpNr = input.nextInt();
boolean quit = false;
do {
System.out.println("1. Add customer");
System.out.println("2. Add account");
System.out.println("3. List customer and accounts");
System.out.println("4. Remove customer");
System.out.println("5. Remove account");
System.out.print("Your choice, 0 to quit: ");
AdminChoice = input.nextInt();
switch (AdminChoice) {
case 1:
// add customer
break;
case 2:
// add account
break;
case 3:
// List customer and accounts
break;
case 4:
// ta bort kund
break;
case 5:
// ta bort konto
break;
case 0:
quit = true;
break;
default:
System.out.println("Wrong choice.");
break;
}
System.out.println();
} while (!quit);
System.out.println("Bye!");
}
}
}
3 ответа
Вы должны использовать hasNextInt()
проверить, является ли введенное число целочисленным или нет. Если вы ввели какие-либо другие типы, вы получите java.util.InputMismatchException
public boolean hasNextInt()
Возвращает true, если следующий токен на входе этого сканера может быть интерпретирован как значение int в основании по умолчанию с использованием метода nextInt(). Сканер не продвигается дальше любого ввода. Возвращает: true тогда и только тогда, когда следующий токен этого сканера является допустимым значением int. Throws: IllegalStateException - если этот сканер закрыт
Вы можете использовать следующий пример
например:
int i = 0;
while (i == 0) {
Scanner input = new Scanner(System.in);
System.out.println("Enter just int");
if (input.hasNextInt()) {
System.out.println(input.nextInt());
System.out.println("good day");
i = 1;
} else {
System.out.println("please enter type int");
}
}
Проблема в том, что вы используете ChoiceOne=input.nextInt()
в двух местах. Только тот, который находится внутри цикла, покрыт try...catch
,
Удалите вызов перед циклом и используйте цикл с разрывом, как предлагается в других ответах. Вы можете проверить заранее перед звонком nextInt()
или поймать java.util.InputMismatchException
,
Сканер input.nextInt(); заставит пользователя, пока он не введет int при использовании в System.in, и вернет указанное значение.
Вам не нужно перехватывать его исключения, это означает, что наличия только следующего кода будет достаточно для того, чтобы ваше значение было равно 1 или 2:
ChoiceOne=input.nextInt();
while (ChoiceOne != 1 && ChoiceOne !=2 )
ChoiceOne=input.nextInt();