Как проверить, не является ли пользовательский ввод значением int
Мне нужно проверить, не является ли входное значение пользователя значением int. Я пробовал разные комбинации того, что я знаю, но я ничего не получаю или случайные ошибки
например:
если пользователь вводит "adfadf 1324", это вызовет предупреждающее сообщение.
что у меня есть:
// Initialize a Scanner to read input from the command line
Scanner sc = new Scanner(System.in);
int integer, smallest = 0, input;
boolean error = false;
System.out.print("Enter an integer between 1-100: ");
range = sc.nextInt();
if(!sc.hasNextInt()) {
error = true;
System.out.println("Invalid input!");
System.out.print("How many integers shall we compare? (Enter an integer between 1-100: ");
sc.next();
}
while(error) {
for(int ii = 1; ii <= integer; ii++) {
...
} // end for loop
}
System.out.println("The smallest number entered was: " + smallest);
}
}
7 ответов
просто выбросить исключение, если ввод недопустим
Scanner sc=new Scanner(System.in);
try
{
System.out.println("Please input an integer");
//nextInt will throw InputMismatchException
//if the next token does not match the Integer
//regular expression, or is out of range
int usrInput=sc.nextInt();
}
catch(InputMismatchException exception)
{
//Print "This is not an integer"
//when user put other than integer
System.out.println("This is not an integer");
}
Try this one:
for (;;) {
if (!sc.hasNextInt()) {
System.out.println(" enter only integers!: ");
sc.next(); // discard
continue;
}
choose = sc.nextInt();
if (choose >= 0) {
System.out.print("no problem with input");
} else {
System.out.print("invalid inputs");
}
break;
}
у вас есть следующие ошибки, которые в свою очередь вызывают у вас это исключение, позвольте мне объяснить это
это ваш существующий код:
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
System.out.print("Enter an integer: ");
usrInput= sc.nextInt();
}
в приведенном выше коде if(!scan.hasNextInt())
станет true
только когда пользовательский ввод содержит оба символа, а также целые числа, такие как ваш ввод adfd 123
.
но вы пытаетесь прочитать только целые числа внутри условия if, используя usrInput= sc.nextInt();
. Что неверно, вот что такое метание Exception in thread "main" java.util.InputMismatchException
.
так правильный код должен быть
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
System.out.print("Enter an integer: ");
sc.next();
continue;
}
в приведенном выше коде sc.next()
поможет прочитать новый ввод от пользователя и continue
поможет в выполнении того же условия (i.e if(!scan.hasNextInt())
) еще раз.
пожалуйста, используйте код в моем первом ответе, чтобы построить свою полную логику.дайте мне знать, если вам понадобится какое-либо объяснение.
попробуйте этот код [обновлено]:
Scanner scan = null;
int range, smallest = 0, input;
for(;;){
boolean error=false;
scan = new Scanner(System.in);
System.out.print("Enter an integer between 1-100: ");
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
continue;
}
range = scan.nextInt();
if(range < 1) {
System.out.println("Invalid input!");
error=true;
}
if(error)
{
//do nothing
}
else
{
break;
}
}
for(int ii = 1; ii <= range; ii++) {
scan = new Scanner(System.in);
System.out.print("Enter value " + ii + ": ");
if(!scan.hasNextInt()) {
System.out.println("Invalid input!");
ii--;
continue;
}
}
взято с похожие статьи:
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
}
// only got here if we didn't return false
return true;
}
может быть, вы можете попробовать это:
int function(){
Scanner input = new Scanner(System.in);
System.out.print("Enter an integer between 1-100: ");
int range;
while(true){
if(input.hasNextInt()){
range = input.nextInt();
if(0<=range && range <= 100)
break;
else
continue;
}
input.nextLine(); //Comsume the garbage value
System.out.println("Enter an integer between 1-100:");
}
return range;
}
Это, чтобы продолжать запрашивать входы, пока этот вход целочисленный и найти, является ли это нечетным или даже иначе он закончится.
int counter = 1;
System.out.println("Enter a number:");
Scanner OddInput = new Scanner(System.in);
while(OddInput.hasNextInt()){
int Num = OddInput.nextInt();
if (Num %2==0){
System.out.println("Number " + Num + " is Even");
System.out.println("Enter a number:");
}
else {
System.out.println("Number " + Num + " is Odd");
System.out.println("Enter a number:");
}
}
System.out.println("Program Ended");
}