2009-07-23 60 views
2

我卡住了,我需要幫助。無論如何,我有Visual Studio 2008控制檯程序需要爲遊戲的每一輪記錄日期,字符串,布爾值和整數。說用戶打10輪,我會有10個。收藏夾問題(.NET 3.5,C#)

我想通過他們保存在數據結構中的那些記錄(收集我相信),然後比賽結束後循環產生一個簡單的控制檯報告。

我被卡住了。這看起來很簡單,但我找不到解決方案。我想有很多方法可以實現這一點,但我正在尋找最簡單的解決方案。

回答

9

編輯:我想簡化這個問題的答案,但也許我簡化太多。我已經改變了下面的可變結構(這是一個壞主意,感謝提醒我@Jon Skeet),還有一個類和屬性。


首先,創建的數據類型來保持信息:

public class RoundInformation 
{ 
    public DateTime Date { get; set; } 
    public String Name { get; set; } 
    public Boolean DidCheat { get; set; } 
} 

然後創建該列表以將其保持:

public List<RoundInformation> Rounds = new List<RoundInformation>(); 

然後,對於每個圓,構建具有一個值全面的信息數據,並將其添加到列表:

RoundInformation info = new RoundInformation(); 
info.Date = DateTime.Now; 
info.Name = "Bob"; 
info.DidCheat = true; // Bob always cheats 
Rounds.Add(info); 

要遍歷:

foreach (RoundInformation round in Rounds) 
{ 
    .. dump to console, left as an excercise 
} 
+0

+1,你輸入瘋狂快。 – Brandon 2009-07-23 21:25:08

+4

我有一個高速網絡連接到我的大腦。我根本不打字。 – 2009-07-23 21:27:24

+0

+1在問題出現之前,您一定已經準備好了這個答案; o) – 2009-07-23 21:27:32

3

試試這個:

public class GameRound { 
    public DateTime Date {get; set;} 
    public string String {get; set;} 
    public bool Boolean { get; set;} 
    public int Integer { get; set; } 
} 

在一個部分,用正確的變量名。

然後,在你的控制檯程序,在頂部加入下面一行:

List<GameRound> rounds = new List<GameRound>(); 

這使得一個回合的「清單」,它可以被添加到,刪除,並通過「循環」。

然後,當你想添加一個回合,使用這樣的代碼:

rounds.Add(new GameRound { Date = theDate, String = theString, Boolean = theBool, Integer = theInt }); 

這使得新GameRound對象,並設置所有的屬性值。請記住用日期等替換正確的名稱/值。

最後,生成報表,試試這個:

foreach (GameRound round in rounds) { 
    Console.WriteLine("Date: {0}\nString: {1}\nBoolean: {2}\nInteger: {3}", round.Date, round.String, round.Boolean, round.Integer); 
} 
+0

對,這是我一直在努力輸入的一字一句;) – Thorarin 2009-07-23 21:31:55

+0

+1:因爲你使用C#3語言功能,比如自動屬性,不妨使用命名的屬性構造函數。 – maxwellb 2009-07-23 21:44:56

0

我想你會成爲一個更具體一點,以你正在嘗試做的。一般來說,您需要一個數據結構來保存Date,String,Boolean和Integer。您可以使用Struct或自定義類來執行此操作。您也可以使用匿名類型,但這是一個高級概念,您可能想遠離。

所以,這些元素之一添加到您的收藏,你只是做:

myCollection.Add(myNewLogElement); 

要遍歷此集合,你這樣做:

foreach (MyLogElementType logElement in myCollection 
{ 
    ' do something... 
} 

我希望這有助於。如果你需要更好的答案,你需要更具體地瞭解你在做什麼。

祝你好運。

1

我會開始說,面向對象的答案更好......但你確實要求最簡單的解決方案。

首先製作一個新的集合:

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

當你想登錄的東西:那麼,在年底

log.Add(string.Format("Date = {0}, String = {1}, Boolean = {3}, and an integer = {4}", theDate, theString, theBool, theInt); 

foreach(string logEntry in log) Console.WriteLine(logEntry); 
0

更多的3.0的開發。

public class GameRound{ 
    public DateTime Date { get; set; } 
    public String Name { get; set; } 
    public Boolean DidCheat { get; set; } 

    public void Print() 
    { 
     Console.WriteLine(String.Format("Date:{0}, Name:{1}, Cheated: {2}", Date, Name, DidCheat)); 
    } 
} 

public class GameRounds : List<GameRound>{ 
    public void Add(DateTime date, string name, bool didCheat) { 
       this.Add(new GameRound { Date = date, Name = name, DidCheat = didCheat }); 
    } 
} 

public static void Play(){ 
      var gameRounds = new GameRounds(); 
      //Round 1 
      gameRounds.Add(DateTime.Today, "ABC", false); 
      //Round 2 
      gameRounds.Add(DateTime.Today, "DEF", true); 

      //Print 
      foreach (var gameRound in gameRounds) 
      { 
       gameRound.Print(); 
      } 
}