public static void main(String[] args) {
 Scanner sc = new Scanner(System.in);
System.out.println("请输入要购买的彩票的组数?");
int num=0;
String answer="";
try
{
 num=sc.nextInt();
 if(num<1||num>200)  
 System.out.println("组数必须大于0小于200!");
 
}
catch(Exception e)
{
System.out.println("您输入的数字有误!");
}

 System.out.println("是否继续?(Y/N)");
 answer=sc.next();  
 if(answer.equalsIgnoreCase("Y"))
 System.out.println("继续");
 if(answer.equalsIgnoreCase("N"))
 System.out.println("停止");

}
输入正常值3,可以按提示继续输入,
输入超范围值212,也可以按提示继续输入,
但输入字符串"aa",提示"是否继续?(Y/N)")"后,不能输入了,并且answer值已被赋为"aa"
奇怪的很,大家帮忙看下!!thank you !!!!

解决方案 »

  1.   

    因为你对aa没有做处理,你只是处理了answer 为y n 
    example:
    System.out.println("是否继续?(Y/N)");
    answer=sc.next();   
    if(answer.equalsIgnoreCase("Y"))
    System.out.println("继续");
    else if(answer.equalsIgnoreCase("N"))
    System.out.println("停止");
     else      
     System.out.println("输入的有字符有误");
    }
      

  2.   


    if(num<1||num>200) 
      System.out.println("组数必须大于0小于200!"); 
      
    }  System.out.println("helloworld")执行完if里面的语句后
    helloworld 一样会输出你应该在if里面加return 才可以防止下面的语句被执行。
      

  3.   

    大家都没有理解我的意思,我想指出的问题是:输入"aa"时,第二个sc.next() 没有执行,它不让我从控制台输入.answer值已被赋为"aa",理论上来讲,answer应赋值为第二次输入控制台的值.有兴趣的朋友把代码复制到eclipse中一试便知.
      

  4.   

    我是故意把"aa"赋值给num中让它进入catch,后面一段代码其实是finally里的,不过去掉了也没什么,只不过进入第二个answer=sc.next();控制台不能输入
      

  5.   

    我是这样理解的: scanner是个扫描器嘛,当你输入aa时,当它扫描到aa时,而你要获取int类型所以就catch到了,而你在后面又有next()可以读取字符串所以便读到,此时并没有任何诸塞方法让你输入所以就直接运行下去,就成为你看到的结果
      

  6.   

    就像下面这段代码一样,a如果赋值为字符串,它的值为给b,例如:输入"aa",结果
    0--aa--
    aa--bb--8楼正解,呵呵
     public static void main(String[] args) {
     Scanner sc = new Scanner(System.in);
    int a=0;
    try {
    a = sc.nextInt();
    } catch (Exception e) {
    e.printStackTrace();
    }
    String b=sc.next();
    System.out.println(a+"--aa--");
    System.out.println(b+"--bb--");

    }
      

  7.   

    nextInt()只捕获能转为int型的,你数的aa不能转换所以进入了catch,然后下面的next()能捕获aa,所以你的answer就为aa了
      

  8.   

    你的扫描器是读int类型的,突然来了一个字符串,它就会抛异常阻塞。
    Scanner sc = new Scanner(System.in); 
    System.out.println("请输入要购买的彩票的组数?"); 
    int num=0;
    String answer="";
    String num1 = "";
    try
    {
     num1=sc.nextLine();
    num = Integer.parseInt(num1);
    if(num<1||num>200) 
    System.out.println("组数必须大于0小于200!"); 
      
    }
    catch(Exception e)
    {
    System.out.println("您输入的数字有误!"); 
    } System.out.println("是否继续?(Y/N)");
    answer=sc.next();
    if(answer.equalsIgnoreCase("Y")){
    System.out.println("继续");
    }
    else 
    if(answer.equalsIgnoreCase("N"))
    System.out.println("停止"); }
    这样子就行啦................
      

  9.   

    同意楼上的讲解。
    还在学习Java中,但是,异常问题需要好好研究一下、
      

  10.   

    我通常使用while(true)做一个无限循环 在捕获异常现实输入错误后加个continue 就回到开始的界面了
      

  11.   


    import java.util.Scanner;public class Main {
    public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.println("请输入要购买的彩票的组数?");
    int num = 0;
    String answer = "";
    try {
    num = sc.nextInt();
    if (num < 1 || num > 200) {
    System.out.println("组数必须大于0小于200!");
    sc.next();//对输入的非法的字符进行处理
    } } catch (Exception e) {
    System.out.println("您输入的数字有误!");
    sc.next();
    } System.out.println("是否继续?(Y/N)");
    answer = sc.next();
    if (answer.equalsIgnoreCase("Y"))
    System.out.println("继续");
    if (answer.equalsIgnoreCase("N"))
    System.out.println("停止"); }
    }
      

  12.   

    当你输入“aa”出现了异常,num只能接受数字,程序就终止了不能再输入了。