2013-10-11 40 views
-1

所以標題說我的代碼不會編譯我現在和之前得到多個問題,當它格式不同時它在一定程度上工作。但現在代碼完全拒絕運行,並且以我當前的理解水平,我無法找出問題,但我相信問題只是我對程序進行格式化的方式,因此它遵循流程圖。代碼不會編譯,我不明白這些錯誤是什麼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // SETUP SESSION 
      // Declare variables 
      Int32 currentGuess, upperLimit, randomNumber; 
      double maxGuesses; 
      char playAgain; 
      Random random = new Random(); 


      // WELCOME THE USER 
      Console.WriteLine("Welcome to the high/low guessing game."); 

      //INITILIZE WIN COUNT AND GAME COUNT 

      Int32 gameCount = 0, winCount = 0; 

      //DO LOOP #1 
      do 
      //SETUP GAME 
      { 
      //REQUEST USER FOR UPPER LIMIT 
       Console.WriteLine("Enter Upper range (e.g. 100):"); 
       upperLimit = Int32.Parse(Console.ReadLine()); 

       //INITILIZE GUESS COUNT 
       Int32 guessCount = 0; 
       bool gameOver = false; 

       //DETERMINE RANDOM NUMBER 
       randomNumber = random.Next(1, upperLimit); 
       //DETERMINE MAX GUESSES 
       maxGuesses = Math.Ceiling(Math.Log(upperLimit, 2) - 1); 

       // INFORM USER RANDOM NUMBER IS CHOSEN AND INDICATE NUMBER OF GUESSES ALLOWED 
       Console.WriteLine("I picked a number between 1 and {0} you get {1} chances to guess it", upperLimit, maxGuesses); 

      //DO LOOP #2 
      do 
          { 
           //PLAY GAME 
           //READ GUESSES 
          Console.WriteLine(string.Format(" Enter Guess {0}: ", guessCount)); 
          currentGuess = Int32.Parse(Console.ReadLine()); 
          if (currentGuess == randomNumber) 
          { 
           //INCRIMENT WIN COUNT 
           winCount++; 
          } 
          if (currentGuess == randomNumber) 
          { 
           Console.WriteLine("You got it!"); 
           gameOver = true; 
           gameCount++; 
          } 
          else if (currentGuess > randomNumber) 
          { 
           Console.WriteLine("Too High"); 
          } 
          else if (currentGuess < randomNumber) 
          { 
           Console.WriteLine("Too Low"); 
          } 


          } while (guessCount < maxGuesses && gameOver == false); 

       //POST PROCESSING GAME 

          if (guessCount++ == maxGuesses) 
             { 
              //INCRIMENT GAME COUNT 
              gameCount++; 
              Console.WriteLine("You lost"); 
              //DISPLAY CORRECT NUMBER IF TOO MANY INCORRECT GUESSES 
              Console.WriteLine("\nThe number was {0},better luck next time!", randomNumber); 
              guessCount = 1; 

           //PROMPT TO PLAY AGAIN 

              Console.WriteLine("Would you like to play again? (Y/N)"); 
              playAgain = char.Parse (Console.ReadLine()); 


             } 
              while (playAgain == 'y' ||playAgain == 'Y'); 

          // display win count 
         Console.WriteLine("Thanks for playing, you won {0} out of {1} games", winCount, gameCount); 
         Console.ReadLine(); 
     } 
    } 
} 
+1

如果您收到錯誤消息,請將其發佈。請不要讓我們猜測你的問題是什麼。 – 2013-10-11 01:51:17

回答

0

您的程序中有兩個錯誤。首先,在使用變量之前,必須始終進行初始化。如果您查看playAgain變量可以採用的不同路徑,則該值僅在您的if (guessCount++ == maxGuesses)路徑中設置。如果條件不成立,您將無緣無故地進入while部分。您可以申報改爲

char playAgain = 'n'; 

第二個錯誤是缺失的支架。如果你仔細做縮進,你會看到:

do 
{ 
    //Bunch of code 
    if (guessCount++ == maxGuesses) 
    { 
     //INCRIMENT GAME COUNT 
     gameCount++; 
     Console.WriteLine("You lost"); 
     //DISPLAY CORRECT NUMBER IF TOO MANY INCORRECT GUESSES 
     Console.WriteLine("\nThe number was {0},better luck next time!", randomNumber); 
     guessCount = 1; 

     //PROMPT TO PLAY AGAIN 

     Console.WriteLine("Would you like to play again? (Y/N)"); 
     playAgain = char.Parse(Console.ReadLine()); 

} while (playAgain == 'y' || playAgain == 'Y'); 

,你可以看到,你錯過了if支架,它應該是

playAgain = char.Parse(Console.ReadLine()); 
    } 

} while (playAgain == 'y' || playAgain == 'Y'); 

此外,還有一個LOT你可以改進的東西。例如,您應該將您的變量聲明放置在不在類頂部的地方。每個評論應該是一個單獨的方法;這將是比較容易的方式爲你,如果你的主要遵循而不是代碼的一個巨大的BLOB流程圖中,是這樣的:

private static void Main(string[] args) 
{ 
    WelcomeTheUser(); 
    InitializeWinCountAndGameCount(); 
    Play(); 
    DisplayWinCount(); 
} 

您也可避免一噸放錯地方的括號的,如果你把你的函數小。

1

兩個問題:

  1. 你缺少你的外表你最後一次,而之前squirly支架做while循環。
  2. 當你聲明它時,你需要初始化「playAgain」字符。

;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // SETUP SESSION 
      // Declare variables 
      Int32 currentGuess, upperLimit, randomNumber; 
      double maxGuesses; 
      char playAgain = 'n'; 
      Random random = new Random(); 

      // WELCOME THE USER 
      Console.WriteLine("Welcome to the high/low guessing game."); 

      //INITILIZE WIN COUNT AND GAME COUNT 

      Int32 gameCount = 0, winCount = 0; 

      //DO LOOP #1 
      do 
      //SETUP GAME 
      { 
       //REQUEST USER FOR UPPER LIMIT 
       Console.WriteLine("Enter Upper range (e.g. 100):"); 
       upperLimit = Int32.Parse(Console.ReadLine()); 

       //INITILIZE GUESS COUNT 
       Int32 guessCount = 0; 
       bool gameOver = false; 

       //DETERMINE RANDOM NUMBER 
       randomNumber = random.Next(1, upperLimit); 
       //DETERMINE MAX GUESSES 
       maxGuesses = Math.Ceiling(Math.Log(upperLimit, 2) - 1); 

       // INFORM USER RANDOM NUMBER IS CHOSEN AND INDICATE NUMBER OF GUESSES ALLOWED 
       Console.WriteLine("I picked a number between 1 and {0} you get {1} chances to guess it", upperLimit, maxGuesses); 

       //DO LOOP #2 
       do 
       { 
        //PLAY GAME 
        //READ GUESSES 
        Console.WriteLine(string.Format(" Enter Guess {0}: ", guessCount)); 
        currentGuess = Int32.Parse(Console.ReadLine()); 
        if (currentGuess == randomNumber) 
        { 
         //INCRIMENT WIN COUNT 
         winCount++; 
        } 
        if (currentGuess == randomNumber) 
        { 
         Console.WriteLine("You got it!"); 
         gameOver = true; 
         gameCount++; 
        } 
        else if (currentGuess > randomNumber) 
        { 
         Console.WriteLine("Too High"); 
        } 
        else if (currentGuess < randomNumber) 
        { 
         Console.WriteLine("Too Low"); 
        } 


       } while (guessCount < maxGuesses && gameOver == false); 

       //POST PROCESSING GAME 

       if (guessCount++ == maxGuesses) 
       { 
        //INCRIMENT GAME COUNT 
        gameCount++; 
        Console.WriteLine("You lost"); 
        //DISPLAY CORRECT NUMBER IF TOO MANY INCORRECT GUESSES 
        Console.WriteLine("\nThe number was {0},better luck next time!", randomNumber); 
        guessCount = 1; 

        //PROMPT TO PLAY AGAIN 

        Console.WriteLine("Would you like to play again? (Y/N)"); 
        playAgain = char.Parse(Console.ReadLine()); 


       } 
      } while (playAgain == 'y' || playAgain == 'Y'); 

      // display win count 
      Console.WriteLine("Thanks for playing, you won {0} out of {1} games", winCount, gameCount); 
      Console.ReadLine(); 
     } 
    } 
} 
+0

謝謝,我還發現其中的猜測計數不會增加的另一個問題,所以我現在修復它現在它的工作感謝指出它我認爲我已經看過所有的括號,但猜不到 – Shahze123

相關問題