nextLine和next的区别

今天在写一个java小程序中碰到一个问题:循环输入时,我的下次输入会跳过nextline这个输入语句;

如下所示,刚开始没有找到原因,后来发现是nextLine()的问题,所以写下来提醒自己

输入商品名:y
输入商品价格:56
输入商品数量:6
dsf
1
[Goods [name=y, price=56.0, num=6]]
输入商品名:输入商品价格:

next()

next()方法在读取输入内容时,会过滤掉有效字符前面的无效字符,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其过滤掉;只有在读取到有效字符之后,next()方法才将其后的空格键、Tab键或Enter键等视为结束符;所以next()方法不能得到带空格的字符串,所有的

nextLine()

而nextLine()方法的结束符只有Enter键,不会过滤输入文字前的空格和其他键值

代码的部分截取

Goods good;
            int i=0;
            double ss=0;
          Scanner scanner = new Scanner(System.in);
          List<Goods> a = new ArrayList<Goods>();
        while(true) {
             good= new Goods();
            System.out.print("输入商品名:");
            String name = scanner.nextLine();//用的nextLine();
            good.setName(name);
            System.out.print("输入商品价格:");
            double price = scanner.nextDouble();
            good.setPrice(price);
            System.out.print("输入商品数量:");
            int num = scanner.nextInt();
            good.setNum(num);
            if(name.isEmpty()) {
                break;
            }else {
                a.add(good);
                i++;
                System.out.println("dsf");
                System.out.println(i);
                System.out.println(a);
            }
          }

运行输入:在最后的商品数量的后面添加了几个空格,可以发现这后面的空格被nextLine() 自动捕捉了,

但还有一个问题,我在最后输入商品按下enter后,也会出现商品名无法输入的问题:

后来在网上看到了这样的一句话:

nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

修改的办法就是将nextLine改为next,或者在后面结束语句后面在加上一句:scanner.nextLine();

猜你喜欢

转载自blog.csdn.net/weixin_42345223/article/details/84671862