2013-07-02 107 views
0

我正在寫一個隨機機會遊戲來挑選隨機贏家。我正在使用for循環將玩家輸入到數組中,但它不允許我爲第一個玩家輸入任何內容。下面是代碼:Java For Loop問題

import java.util.Scanner; 
import java.util.Random; 
public class Run { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner(System.in); 
    Random rand = new Random(); 

    System.out.println("How many people will play???"); 
    int playernum = input.nextInt(); 

    String players[] = new String[playernum]; 

    for(int i = 0; i < playernum; i++){ 
     System.out.println("Who is player #" + (i+1)+"?"); 
     players[i] = input.nextLine(); 
    } 

    System.out.println("The winner is: " + players[rand.nextInt(playernum)]); 

} 

} 
+1

的想法!你創建一個基於'playernum'的字符串數組,因爲它的大小,然後嘗試循環通過增加的東西... – Tdorno

+2

[nextXXX後使用nextLine時掃描程序問題]的可能重複(http://stackoverflow.com/問題/ 7056749/scanner-issue-when-using-nextline-after-nextxxx) – acdcjunior

回答

4

input.nextInt()調用讀取整數但保留輸入流中的未讀新行字符,所以input.nextLine()通話中環只需讀取在第一次迭代該字符。

所以,你需要以下 -

int playernum = input.nextInt(); 
input.nextLine(); //read the unread new line character from the input stream 
+0

@downvoter:你會評論爲什麼downvote? –

+0

@Besh我投了贊成票。你怎麼知道有人投了你的帖子?有沒有辦法告訴?我在這裏很新鮮。 –

+0

@HenryHarris您可以在個人檔案<聲譽<歷史記錄<聲譽<歷史記錄 – Tdorno

0

我覺得你的問題是在這條線players[i] = input.nextLine();

我想你要尋找的是,players[i] = input.next();

「此掃描器執行當前行,並返回跳過的輸入信息。這個方法返回當前行的其餘部分,不包括任何行分隔符的結束。」 查看API說明here

0

在for循環中使用input.next()而不是input.nextLine()。這樣,未使用的新行字符就不會成爲問題,就像@BheshGurung在他的回答中解釋的那樣。

2

使用以下代碼。代碼中的註釋解釋了更改。

import java.util.Scanner; 
import java.util.Random; 
public class Run { 

public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Scanner input = new Scanner(System.in); 
    Random rand = new Random(); 

    System.out.println("How many people will play???"); 
    int playernum = input.nextInt(); 
    input.nextLine(); //ADDED LINE 

    String players[] = new String[playernum]; 

    for(int i = 0; i < playernum; i++){ 
     System.out.println("Who is player #" + (i+1)+"?"); 
     players[i] = input.nextLine(); 
    } 

    System.out.println("The winner is: " + players[rand.nextInt(playernum)]); 

} 

} 

我們增加input.nextLine();因爲input.nextInt();離開,我們需要清除一個新行字符。有人把這個新行字符作爲播放器1

-Henry

+0

幫助OP找出問題並給他一個解決問題的辦法,而不是僅僅爲他解決問題並繼續前進? – Tdorno

+0

@Tdorno好點。我試圖解釋它,但我想他自己學習會更好。 –