2012-11-29 26 views
1
import java.util.Scanner; 

public class ClassList { 

    static final int SIZE = 10; 

    public static void main(String Args[]) { 

     Student[] students = new Student[SIZE]; 
     Scanner s = new Scanner(System.in); 

     String name, id; 
     float gpa; 

     do { 

      System.out.println("Enter a Student"); 
      name = s.nextLine(); 

      System.out.println("Enter a ID"); 
      id = s.nextLine(); 

      System.out.println("Enter a GPA"); 
      gpa = s.nextFloat(); 

     } while(!name.equals("quit")); 
    } 
} 

基本名稱,發生了什麼事,當你運行這個程序,它會在第二次迭代運行在一個晴朗的話,它會問一個學生的名字。但它只是跳過用戶應該輸入的地方並轉到「獲取ID」。我如何阻止這一點。程序爲何跳​​過我需要輸入

+0

考慮下次發佈代碼時只需*少許*少的空白。你不必要的開放空間使你的代碼有點難以閱讀。請記住,良好的代碼格式對於我們的好處比對您的好處更大,但是因爲如果我們能夠輕鬆閱讀和理解您的代碼,我們可以給您提供更好的幫助,那麼這對您也有好處。 –

+0

此問題與http://stackoverflow.com/q/6289765/130224類似 – reprogrammer

回答

3

在第一次迭代,nextFloat()不消耗任何新行字符。在第二次迭代中,nextLine()方法將消耗第一次迭代留下的換行符。因此,第二次迭代中的nextLine()方法似乎跳過了用戶輸入,而它只是消耗了前一次迭代留下的換行符。解決這個問題

一種方法是調用nextLine()nextFloat()後食用剩的換行字符。

1

您可以將

s.nextLine(); 

在循環結束時消耗的換行符。目前Scanner.getFloat()正在通過換行符通過對您的語句:

name = s.nextLine(); 

這是因爲它已經與這個人物提供的阻塞。