2017-10-04 89 views
0

我試圖讀取6行用戶輸入,但我無法讓它們正確打印。在Java中輸入6行

我第一次做這樣的:

import java.util.Scanner; 

public class Test { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     String name, name2; 
     double price, price2; 
     int item, item2; 

     System.out.print("Name: "); 
     name = input.next(); 
     System.out.print("Price: "); 
     price = input.nextDouble(); 
     System.out.print("Item Number: "); 
     item = input.nextInt(); 
     System.out.println(""); 

     System.out.print("Name 2: "); 
     name = input.next(); 
     System.out.print("Price 2: "); 
     price = input.nextDouble(); 
     System.out.print("Item Number 2: "); 
     item = input.nextInt(); 
     System.out.println(""); 
    } 
} 

我測試後,它不會讓我過去的輸入「價格:」(我在BlueJ的BTW)。

Name: Jack B 

Price: 

我試着用input.nextLine();代替input.next(),但最終這個

Name: Jack B 

Price: 30 

Item Number: 10 

Name 2: Price 2: 

如果字符串沒有空格它的工作原理,但是如果它有一個,會出現這種情況。我如何獲得它通常打印6行?

+0

Java不是JavaScript的。請正確標記您的問題。 – Xufox

+0

@Xufox輸出無碼... – Tom

+0

參見http://stackoverflow.com/questions/13102045/scanner-is-skipping-nextline-after-using-next-nextint-or-other-nextfoo – 2017-10-04 18:20:16

回答

0

您需要「刷新緩衝區」。

每當你讀取一個int,你實際上是讀取整數的字符串值,不包括換行符,並將其轉換爲int。

當您撥打nextInt()並輸入42時,緩衝區看起來像這樣。

"42\n" 

讀完int後,緩衝區仍包含換行符。

"\n" 

當你調用nextLine(),它從緩衝區讀取換行字符,並返回一個空字符串。

解決方案。在讀取每個int,double等之後調用nextLine()來讀取並丟棄尾隨的換行符。

int i = input.nextInt(); // read integer value 
input.nextLine(); // read and throw away newline character 
0

兩個建議:

  1. 使用nextLine而不是next閱讀整條生產線包括空格。
  2. 在您完成第一個nextInt後,請使用額外的nextLine。這需要消耗您輸入的額外換行符,但不會由nextInt使用。

請參閱以下workig片段:

Scanner input = new Scanner (System.in); 
    String name, name2; 
    double price, price2; 
    int item, item2; 

    System.out.print("Name: "); 
    name = input.nextLine(); 
    System.out.print("Price: "); 
    price = input.nextDouble(); 
    System.out.print("Item Number: "); 
    item = input.nextInt(); 
    System.out.println(""); 

    input.nextLine(); 
    System.out.print("Name 2: "); 
    name = input.nextLine(); 
    System.out.print("Price 2: "); 
    price = input.nextDouble(); 
    System.out.print("Item Number 2: "); 
    item = input.nextInt(); 
    System.out.println("");