我有一个java代码,我想从用户那里拿一个整数。如果该输入确实是一个整数,那么它的精确控制将通过下一个,但如果输入不是整数,则控件将再次进行扫描。问题是当用户给出一个整数以外的时候,while循环一次又一次地循环。怎么解决?请帮帮我。
我在本网站尝试了问题答案,但没有得到任何结果。
这是我的代码 -
import java.io.* ;
import java.util.Scanner;
class A{
int name;
int take_int(){
Scanner data=new Scanner(System.in);
//BufferedWriter BW=new BufferedWriter();
while(true){
int fault_res=0 ;
try{
System.out.print("Enter A Number : ");
//BW.flush();
name=data.nextInt(); // comment : if user give an alphabet
// then the control rounds again and
// again, how to solve? System is not
// taking any input after entering
// any alphabet first time, but it
// should take as per my code, I
// think is is happening due to i/p
// buffer, unable to delete it.
}
catch(Exception E){
System.out.println("\nSomething Went Wrong !!\nRetry Please !!!");
fault_res=1 ;
}
if(fault_res==0){break ;}
}
System.out.println("\nnumber at other class "+name);
return name ;
}
}
class sn{
public static void main(String args[]){
A obA=new A();
int number=obA.take_int();
System.out.println("\nYou have entered "+number);
}
}
答案 0 :(得分:1)
您可以清除catch块的输入。如果您不想要除整数之外的任何内容,那么只需在inputStream.nextLine();
块中执行catch
。
以下是仅采用整数输入的通用代码段。
private static int takeOnlyIntegerInput() {
Scanner keyboard = new Scanner(System.in);
boolean isValid = false;
int num=-1;
while (isValid == false) {
System.out.print("Please enter an: ");
try {
num = keyboard.nextInt();
isValid = true;
} catch (InputMismatchException ex) {
System.out.println("Wrong input. Ony integer input will be processed.");
//clean up the garbage input
keyboard.nextLine();
}finally{
keyboard.close();
}
}
return num;
}
答案 1 :(得分:0)
您应该在您的例外catch
条款中添加data.next()
或data.nextLine()
。
选择哪一种取决于输入的类型以及您期望的错误类型。如果您希望在同一行上有更多输入,例如:
XXXX 1234 5678
然后只有data.next()
才会正常运行,因为它会跳过XXXX
,下一个标记将是1234
,这就是你想要的。
如果您在这种情况下使用data.nextLine()
,则会跳过XXXX
和1234
- 一直到行结束,下一个要读取的标记将为{ {1}}。
答案 2 :(得分:0)
按如下方式重写您的程序,它将起作用。
import java.io.* ;
import java.util.Scanner;
class A{
int name;
int take_int(){
Scanner data=new Scanner(System.in);
while(true){
int fault_res=0 ;
try{
System.out.print("Enter A Number : ");
String input = data.nextLine();
name=Integer.parseInt(input);
}
catch(Exception E){
System.out.println("Something Went Wrong !! Retry Please !!!");
fault_res=1 ;
}
if(fault_res==0){break ;}
}
System.out.println("\nnumber at other class "+name);
return name ;
}
}
class sn{
public static void main(String args[]){
A obA=new A();
int number=obA.take_int();
System.out.println("\nYou have entered "+number);
}
}