查了一下 next   nextLine连用 说是next只读取了   换行符 的前面的内容但是没有读取换行符  当你调用nextLine的时候他会去读取当前行由于next丢下了个换行符 刚好nextLine是以换行符作标志 读取它前面的内容  而前面的内容被next拿走了 现在没有值了所以为空  也不会去等控制台输东西   我想其他的next*累死next方法 解决方法,添加:
              while((name=scan.nextLine()).equals("")){    
     }
追问:这个原因应该是nextLine先去读取缓存中的东西导致这个问题,但是我去看源码时 nextLine中会去调用clearCaches();这个方法不是清他的缓存吗?既然清了为什么还能读取到?

解决方案 »

  1.   

    原因同楼上。因为nextInt读取的是换行符之前的Int类型的数据,nextline读取的是从焦点处到下一个换行符之前的内容,并将焦点移至下一个换行符之后。
    public static void main(String[] agrs) {
    Scanner scan = new Scanner(System.in); System.out.println("输入年龄:");
    int age = scan.nextInt(); System.out.println("输入身高:");
    double stature = scan.nextDouble(); System.out.println("输入名字:");
    String name = scan.nextLine();
    name = scan.nextLine(); System.out.println("" + age + "   " + stature + "   " + name);
    }
    代码这样处理就没有问题了。
    结合不同方法从键盘读取数据的时候,有时候不得不增加额外的nextline开销,以去掉换行符的影响