-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();
       }
    }
}
4

2 回答 2

1

两个问题:

  1. 在外部 do while 循环中的最后一个 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();
       }
    }
}
于 2013-10-11T02:05:01.153 回答
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');

此外,还有很多可以改进的地方。例如,您应该将变量声明放置在使用它们的地方,而不是放在类的顶部。每个评论都应该是一个单独的方法;如果您的 Main 而不是一大堆代码,那么您遵循流程图会更容易:

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

如果你保持你的函数很小,你也可以避免大量放错位置的括号。

于 2013-10-11T02:29:50.283 回答