2013-11-25 89 views
0

我寫了這個代碼來讓碰杯承認他們的紀錄循環跳過一些語句

public static void main (String args[]){//Start main 
    String [] name = new String [5]; 
    int [] age = new int [5]; 
    char [] test = new char [5]; 
    addPatients(name , age , test); 
} 

public static void addPatients (String[] n ,int[] a ,char[] t){ 
    i=0; 
    while (i<n.length) 
    { 
     System.out.println("Enter Patient’s Name: "); 
     n[i] = scan.nextLine(); 

     System.out.println("Enter Patient’s Age: "); 
     a[i]=scan.nextInt(); 

     System.out.println("Enter Patient’s Medical test: "); 
     t[i]=scan.next().charAt(0); 
     i++; 
    } 

    System.out.println("Enter the patient’s index to find his/her information : "); 
    int index= scan.nextInt(); 
    System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient Medical test: " + t[index]); 
} 

,但問題是在addPatients,當方法開始工作,它只能讀取第一個語句

System.out.println("Enter Patient’s Name: "); 
n[i] = scan.nextLine(); 

from once once and skip it in the second loop!

+1

請縮進代碼。 –

+0

特別是有什麼錯誤嗎? – Adarsh

+0

@Adarsh代碼和問題輸入清楚 – Walaa

回答

0

我很感激給予到目前爲止..... 所以最後修改代碼來解決這個問題是在這裏很好的解釋...

public static void addPatients (String[] n ,int[] a ,char[] t) 

{ 

    final Scanner scanner = new Scanner(System.in); 
    int i=0; 
    while (i<n.length) 
    { 
     System.out.println("Enter Patient’s Name: "); 
     n[i] = scanner.nextLine(); 

     System.out.println("Enter Patient’s Age: "); 
     a[i]=scanner.nextInt(); 

     System.out.println("Enter Patient’s Medical test: "); 
     t[i]=scanner.next().charAt(0); 
     i++; 
     scanner.nextLine(); // To swallow the extra excess newline(enter) character. 
    } 
    System.out.println("Enter the patient’s index to find his/her information : "); 
    final int index= scanner.nextInt(); 
    System.out.println ("Patient name : " + n[index] +"\n Patient age : " + a[index] +"\n Patient Medical test: " + t[index]); 
} 
0

nextInt後不要使用nextLine,作爲nextInt不消耗\n,它會在nextLine使其「跳過」您的實際輸入消耗。

一種解決方案是增加額外的nextLinenextInt爲「燕子」,這不是通過nextInt閱讀\n

那現在發生的事情在你的代碼是,當你問int輸入,用戶類型,例如12和回車鍵(\n),該int值將被讀取,但是當你再次達到n[i] = scan.nextLine();\n正在等待閱讀..它會被閱讀,所以你會認爲它被跳過了。

0

問題是,當您編寫scan.next()來讀取患者的醫學測試時,構成下一個單詞的字符將從掃描儀中提取,但是新行字符或其後的空白字符不是。

例如,如果用戶輸入了P A S S然後按下Enter,則從掃描儀讀取字母P A S和S,但換行符保留在掃描儀上 - 它將成爲下一個讀取的字符。然後,在循環的第二次迭代中,以下對scan.nextLine()的調用只是讀取剩下的換行符,而不是讀取第二個患者的名稱。

之後,一切都不堪重負。掃描儀有幾個字符還沒有被讀取,但應該是。

解決方法是在t[i]=scan.next().charAt(0);之後添加一個額外的scan.nextLine(),以將額外的換行符從掃描器中拉出。

0
System.out.println("Enter Patient’s Name: "); 
    n[i] = scan.nextLine(); 

    System.out.println("Enter Patient’s Age: "); 
    a[i]=scan.nextInt(); 

    System.out.println("Enter Patient’s Medical test: "); 
    t[i]=scan.next().charAt(0); 
    i++; 

在上面的代碼中,您首先輸入一個名稱,然後按回車。該名稱將存儲在n [i]中,但換行符(輸入)仍然存在,作爲等待讀取的輸入。在你的年齡問題中,你正在等待一個整數,它跳過新行(可能是任意數量的新行),並等待你輸入的下一個整數。測試結果的下一個問題等待下一個令牌。 next()方法會忽略所有新行字符和空格,直到它可以獲取完整的標記爲止。你在這裏輸入一個值,然後回車。因爲nextLine()不會忽略換行符,所以這個輸入在您的名字問題中作爲循環第二次運行的輸入讀取。所以,你可以在第三個問題之後通過在每個循環之後提取它來忽略你所選擇的換行符。或者使用next()代替newLine()。通過使用next(),你只能輸入1個字。