想做输入的学号不是INT型出现异常时 返回继续输入学号密码 结果运行出现死循环
在这个程序上怎么改
程序比较乱本小白初学JAVA悲催啊 Scanner stdin = new Scanner(System.in);
int a=0;
do{
     try{
   System.out.println("输入学号");
   int num=stdin.nextInt();
}catch(Exception e){
System.out.println("学号密码应为数字");
b=1;}
 }while(b==1);

解决方案 »

  1.   


    就这个 本人小白写的比较乱
    用了两个do while不知道该不该这么写public class Test
    {
    public static void main(String[] args)
    {
    Scanner stdin = new Scanner(System.in);
    int a=0;
    int b=0;
    do
    {
    try

    do
    {
    System.out.println("输入学号");
    int num=stdin.nextInt();
    if (num==20120208)
    {
    System.out.println("输入密码");
    int stukey=stdin.nextInt();
    if(stukey==20120208)
    {
    System.out.println("登陆成功!");
    a=0;
    }
    else
    {
    System.out.println("密码错误");
    }
    }
    else
    {
    System.out.println("学号错误");
    a=1;
    }
    }while(a==1);
    }catch(Exception e){
    System.out.println("学号密码应为数字");
    b=1;
    }
    }while(b==1);
    }
    }
      

  2.   

    我看过了 你要是第一次输错了比如让你输入学号  你输a的话就会出现死循环你那个stdin.nextInt()方法会出现异常  然后你的外层循环还没有打破所以当程序第二次走到那个方法时还会从上次出现异常的地方重新读取但是还是错误的  所以就会出现死循环
      

  3.   

    因为你出错了后,b=1没有出口了...在 int stukey = stdin.nextInt();后面添加上b=0;就可以了,测试通过了
      

  4.   

    我也是初学,我把最后一行While(b==1)改成了(b!=1)就可以了
      

  5.   

    只需要加一句:
    Scanner stdin = new Scanner(System.in);
    int a=0;
    do{
    try{
    System.out.println("输入学号");
    int num=stdin.nextInt();
    b = 2;\\look here baby
    }catch(Exception e){
    System.out.println("学号密码应为数字");
    b=1;}
    }while(b==1);
    出现异常的是上面那句,如果有异常程序不会执行异常后面的语句,因而不改变b。
    若没有异常则改变b,从而退出循环。
      

  6.   

     开始的时候没看明白楼主初衷,不过感觉问题应该出在异常判断那里了只要输出了整形以外的就直接跳到catch,但是Scanner stdin = new Scanner(System.in);在循环之外 stdin的指定的内存应该还是出现异常的值,所以就一直是死循环。我把Scanner stdin = new Scanner(System.in);放在了第一个DO下面,测试正常。
      我知道这么改有点投机取巧了,希望高手指点一二。
      

  7.   


    public class Bench {
    public static void main(final java.lang.String[] args) {
    Scanner stdin = new Scanner(System.in);
    boolean flag = true;
    while (flag) {
    int a = 0;
    try {
    System.out.println("输入学号");
    int num = stdin.nextInt();
    } catch (Exception e){
    System.out.println("学号密码应为数字");
    stdin.nextLine();
    continue;
    }
    flag = false;
    }
    }
    }
      

  8.   

    Scanner stdin = new Scanner(System.in);
    int a=0;
    do{
    try{ 
    System.out.println("输入学号");
    int num=stdin.nextInt();
    b=0;//重置玄幻变量
    }catch(Exception e){
    System.out.println("学号密码应为数字");
    b=1;}
    }while(b==1);
      

  9.   

    http://topic.csdn.net/u/20120110/21/d13b8b4b-342e-4292-89bd-5d7e907c85e9.html
    看看这个说的很清楚