1. 程式人生 > >nextLine和next的區別

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();