do { 
System.out.println("选择:1.小写;2.大写;3.退出.");
try{
menuchoose = sc.nextInt();
}catch(Exception e){
System.out.println("请确认输入的是数字!");//提示此消息之后便是死循环,求解
                                 //再提示上面的消息之后还能继续输入数值.
} switch (menuchoose) {
case 1:
Lowercasetest();// 小写
break;
case 2:
Capitalletterstest();// 大写
break;
case 3:
System.out.println("程序退出,谢谢使用!");
System.exit(0);
}
} while (true);异常处理之后还能继续输入,等高手。

解决方案 »

  1.   

    你的do while(true)循环,本来就是无限循环的。异常被捕获,没有抛出,所以循环不终止。要终止循环,在catch中break下。
      

  2.   

    二楼大师正解,其实只要记住try里遇到异常try块里后的代码就不执行啦,进入catch 后进入finally执行代码。
      

  3.   

    do   while (true ) 是一个死循环,可以无限循环下去,在执行try {} catch{} 的过程中,发现了异常,并且异常被捕获。但是异常没有抛出去,就要无限的循环。为了跳出循环,循环体内部要用break语句来跳出。
      

  4.   

    关键是在nextInt()匹配到异常后,其实不会从输入流中,将该值清除掉,所以变成无限的在nextInt()时继续发生异常,请这样修改:try{
                    menuchoose = sc.nextInt();
    }catch(Exception e){
                    System.out.println("请确认输入的是数字!");//提示此消息之后便是死循环,求解
                                     //再提示上面的消息之后还能继续输入数值.
             sc.next(); // 增加这句话,把输入的错误值,从流中提取掉(消费掉、扔掉)。
    }
      

  5.   

    首先要弄懂try-catch-finally语句块,若try语句块中发生错误或者异常,则系统捕获异常,找到与catch语句块中与异常实例相匹配的catch语句块,若在catch中有return或throw语句,则程序会去搜索finally语句块,若有,则先执行finally语句块,然后再执行return或throw语句,若没有,则立即执行return或throw语句;若都执行完了,程序依然会顺序执行,就像是楼至do语句块中的try-catch一样,对,发生异常了,程序是捕获了,但是你捕获了,程序依然会顺序往下执行,而你的do-while循环本身就是个死循环那,你还想怎么着啊,你的程序就是这么写的,当然程序会这么做啦,结果也就注定了。