2015-05-21 98 views
0

與此相同question我想在用戶給我輸入字符串時從用戶那裏獲得輸入。但不同之處在於,在我拿到字符串之前,我必須得到26個數字。所以這段代碼在得到myStrings時工作不正常。我該怎麼辦?獲取輸入java

錯誤代碼:

for (int i = 97; i < 123; i++) { 
     alphabet[i] = scan.nextFloat(); 
    } 
    String infix; 
    int i = 0; 
    String[] myStrings = new String[100]; 

    while (scan.hasNextLine()) { 
     infix = scan.nextLine(); 
     if (infix.length() > 0) { 
      myStrings[i] = infix; 
      i++; 
     } else { 
      break; 
     } 
    } 

編輯:錯誤的方法,當我調試它,我纔給的字符串作爲輸入,此行:(「while (scan.hasNextLine())」)通(提供具體數字後),並infix在這一行(infix = scan.nextLine();是「」),所以while,不正確。然後再打破。

+0

您是什麼意思?爲什麼它錯了? – Stultuske

+0

鏈接問題的第一個註釋也適用於此處:「此代碼以什麼方式工作錯誤」?請在你的問題中更具體一些,否則人們會傾向於關閉它們。 – Thomas

+0

「我想從用戶那裏得到輸入,而他/她給我的字符串。」而這段代碼並沒有這樣做@Stultuske – user4615534

回答

0

問題是,在從掃描儀讀取一個浮點數後,掃描儀中會保留換行符"\n",這意味着當第一個scan.nextLine()運行時,會得到剩下的換行符,導致您的代碼碰到else塊,並打破循環。

你可以得到你的循環之前的下一行:

String infix; 
int i = 0; 
String[] myStrings = new String[100]; 
infix = scan.nextLine(); //Get it here to throw away the new line 

while (scan.hasNextLine()) { 
    infix = scan.nextLine(); //Should contain whatever the user entered 
    //code 
} 

或者,當你從環路獲得浮動,你可以使用Float.parseFloat()scan.nextLine()結合起來,就像這樣:

for (int i = 97; i < 123; i++) { 
    alphabet[i] = Float.parseFloat(scan.nextLine()); 
} 

當您收到最後一個浮點數後,將停止在掃描儀中留下一條新線

0

這是Java中的一個常見問題。在用戶使用Scanner獲得輸入後,像nextInt(); nextDouble();你需要消耗一行空scan.nextLine();因爲這些方法不消耗新的行表達式「\ n」。 ,然後才能獲得一些字符串。

+0

非常感謝你:) – user4615534