2012-05-04 43 views
1

這裏構建一個簡單的應用程序;問題的方法:流不是預期的

靜態硬幣類

public static void SetUpCoins() { 
     coin1 = new Coin(); 
     coin2 = new Coin(); 
    } 

public static void PlayConsole() { 
     SetUpCoins(); 
     OutputWinner();    
    } 


     public static void OutputWinner() { 

     if (coin1.ToString() == "Heads" && coin2.ToString() == "Heads") { 
      Console.WriteLine("You threw Heads - you win"); 
      ++point_player; 
     } else if (coin1.ToString() == "Tails" && coin2.ToString() == "Tails") { 
      Console.WriteLine("You threw Tails - I win"); 
      ++point_comp; 
     } else { 
      Console.WriteLine("You threw Odds"); 
      WaitForKey_ConsoleOnly("Press any key to throw again"); 
      PlayConsole(); 
     } 

     Console.WriteLine("You have {0} points and the computer has {1} points", point_player, point_comp); 

     if (WantToPlayAgain_ConsoleOnly()) { // ask user if they want to play again; return bool 
      PlayConsole(); 
     } 
     } 

private static bool WantToPlayAgain_ConsoleOnly() { 
      string input; 
      bool validInput = false; 
      do { 
       Console.Write("Play Again? (Y or N): "); 
       input = Console.ReadLine().ToUpper(); 
       validInput = input == "Y" || input == "N"; 
      } while (!validInput); 

      return input == ("Y"); 
     } 

如果false是從WantToPlayAgain_ConsoleOnly()返回程序不會退出。下面是輸出,這也解釋了我的問題的一個例子:

enter image description here

爲什麼,當WantToPlayAgain_ConsoleOnly是假的,做節目無法通過控制playConsole方法然後退出。而不是這種重複。

OutputWinner完成運行後,它跳轉到PlayConsole,然後返回到OutputWinner的else語句 - 不知道爲什麼。

+0

請把WantToPlayAgain_ConsoleOnly() – Adil

+0

的代碼,你怎麼可以做'新幣()''時爲Coin'靜態? – V4Vendetta

+0

你的問題是基本的代碼結構。具體來說,問題是在「賠率」案例中引發的遞歸 - 斷點,逐步完成,您將會看到到底發生了什麼。 –

回答

0

正如前面回答說,當你把賠率你有問題。 因爲此時您再次調用完全相同的方法,並且當該調用返回時,您將在樂譜顯示屏上恢復正常,並再次要求播放器播放。
因爲你在呼喚PlayConsole遞歸,這意味着每一個你扔「奇」的時候,你會得到一個更及時的,你沒有問。

你可以重組這樣的方法:

public static void OutputWinner() { 
    do { 
     // Game code 
    } 
    while (WantToPlayAgain_ConsoleOnly()); 
    } 

這也擺脫了遞歸。

2

因爲您呼叫PlayConsole()後,「按任意鍵再次拋出」。一旦該通話返回,程序將無條件繼續「您有{0}分,計算機有{1}分」,無論通話過程中發生了什麼。

嘗試改寫爲迭代而不是遞歸的邏輯?

+0

是的,我可以:-)但這是你應該能夠自己弄清楚的。 – Christoffer