2017-09-18 75 views
0

我想分配給用戶名稱變量名稱變量(Player1,Player2等)。C# - 將用戶輸入分配到for循環中的列表

程序要求的玩家數量取決於用戶的數量(int TotalPlayers)。所以如果用戶說總數是5,那麼for循環會要求5個名字,而不是更多。

我試圖通過首先將所有用戶輸入添加到列表中,然後將列表中的名稱分配給名稱變量,但我似乎無法完成此工作。

有人可以幫助我解決這些錯誤嗎?還是有更好的方法去做這件事?

謝謝!

Console.WriteLine("Write amount of players"); 
int TotalPlayers = Convert.ToInt32(Console.ReadLine()); 

List<string> PlayerList = new List<string>(); 

for (int players = 0; players < TotalPlayers; players++) 
{ 
    Console.WriteLine("Enter player {0}'s name:", players + 1); 
    PlayerList.Add(Console.ReadLine()); 
} 

Console.WriteLine(PlayerList); 
+7

是你看到具體是什麼錯誤?請注意,你可能想要'Console.WriteLine(string.Join(「,」,PlayerList)'實際獲得有用的信息。 – juharr

+0

你正在寫出一個列表。你不應該循環嗎? – Minh

+0

是的,for有一件事你只是打印列表對象的名稱,另外,可能不是這裏的問題,但是如果用戶意外地輸入非數字值給玩家計數,那麼你的程序會崩潰,這讓我很煩惱。使用這樣的東西:'int TotalPlayers; while(!Int32.TryParse(Console.ReadLine(),out TotalPlayers)){Console.WriteLine(「Value must be numeric ... Write amount of players」);}' – u8it

回答

1

上面的代碼看起來是正確執行,但我認爲我們需要一些更多的信息。你的名字變量是什麼樣的?如果你想要,你可以像這樣通過循環創建一個列表。

說NameVariable是一些簡單的對象。

public class NameVariable 
{ 
    public int id {get;set;} 
    public string Name {get;set;} 
} 

那麼你的代碼看起來是這樣的:

public static void Main() 
{ 
     Console.WriteLine("Write amount of players"); 
      int TotalPlayers = Convert.ToInt32(Console.ReadLine()); 

      List<NameVariable> PlayerList = new List<NameVariable>(); 

      for (int index = 0; index < TotalPlayers; index++) 
      { 
       Console.WriteLine("Enter player {0}'s name:", index + 1); 
       PlayerList.Add(new NameVariable(){ 
        Name = Console.ReadLine(), 
        Id = index 
       }); 
      } 

    foreach(var player in PlayerList) 
    { 
     Console.WriteLine(player.Name); 
    }    
} 
+0

謝謝!這使一切變得如此簡單。我的代碼是正確的,它正在做我需要它做的事情,但是我接下來要做的事情通過使用類名來改善很多。 – Sulhan

+0

最後的foreach循環顯示NameVariable類中的所有名稱,我將它們分配給字符串。在我使用string player1 = PlayerList [0]之前。但它似乎沒有工作了。 – Sulhan

+0

嘿蘇爾漢,如果你只是想把所有這些名字放回到一個字符串列表中,你可以保留原來的列表,並在最後一個循環中添加它,當你遍歷PlayerList,所以在「Console.WriteLine (參賽者姓名);」你可以編寫ListOfString.Add(player.Name),那麼你也會有一個字符串列表。希望能幫助到你! – DLB

1

看起來像是Console.WriteLine(PlayerList);這會導致您的問題。 它使用內置的從基礎對象ToString方法,這將給你

System.Collections.Generic.List`1[System.String] 

或同級。

你可以試試Console.WriteLine(string.Join(", ", PlayerList));來得到一個簡單的字符串列表。

大多數情況下,.Net中的默認字符串生成不是您想要的,您需要遍歷列表並自行構建字符串。

+0

似乎對了我。我會補充說一個好的基本格式可能是這樣的......'PlayerList.Insert(0,「\ tAll Players Accepted」); Console.WriteLine(string.Join(「\ r \ n \ t」,PlayerList));' – u8it

+0

是的,第一行代碼是我得到的代碼中寫的,我認爲我的代碼不是好好工作。它現在已經得到糾正。謝謝! – Sulhan