背景:
while(true){
canner imput
switch()}在while里面有一个switch,根据用户输入来选择(控制台)然后case里面有个   输入 int 类  然后我加了 异常处理(出现异常之后break)重新进行while循环结果 case里面sacnner 异常的输入,没有被清空,导致,这次while 循环没有输入,直接用了case里面的输入异常的那个结果(一脸懵逼!),然后while循环了,直接进入的 switch 里的deflat,然后deflat有个break,重新while这次while 就好了,,,中间那个while多余了,原因是上次 Scanner 异常输入没有刷新掉,,,大神们 有办法解决吗啊啊啊!!!!

解决方案 »

  1.   

    就是,我这次用Scanner 从控制台接受一个int类型的数,然后程序运行,输入的string会报错,所以需要异常处理吗不是处理完了break,返回但是我上次接受的那个 数 ,还在Scanner缓冲区里,怎么去掉他,--
      

  2.   

    canner imput,这里可能返回的Strig类型,switch后面可写的参数是否可以是String,可以去搜索下
      

  3.   

    对啊,我的switch-case 用的值是“ ”   字符串类型的,但是 Scanner 的缓存区怎么清空呢!!! 
      

  4.   

    不太懂 你是说reset吗. (我刚查的API)  scanner那种奇怪的东西,多数情况是没什么人用的吧..
      

  5.   

    竟然说Scanner没人用,,,控制台语句不就是用 Scanner 来输入的吗
      

  6.   

    表达的不清楚,就贴上你的代码,注意一下关键字,比如Scanner、default
      

  7.   

    这个问题我也遇到过 好像是在try catch 的catch里面重新int 原理是int a 程序就会在内存中划一个区域 当给它输入一个字符串 根本不能赋值 所以赋一个NULL值 此时a没有内存 在catch里面重新int a给它重新在内存中划一个区域
      

  8.   

    Scanner  是接收控制台输入的,你把Sacnner sc = new Scanner(System.in);放到循环的外面。注意,凡是遇见sc.next()或者sc.其他什么,就是等待控制台输入,处于阻塞状态,代码也停在那里。如果不需要接收控制台输入信息了,让sc.close()就好了。如果还有什么需要可以留言给我。看到你的代码过少,只能说这么多了。
      

  9.   

    CODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODECODE
      

  10.   

    在每次循环开始时都new 一次Scanner 就行了while(true){
            Scanner sc = new Scanner(System.in);
            String input= sc.next();
    switch()}