代码无法编译,我不明白这些错误的用途

本文关键字:错误 明白 编译 代码 | 更新日期: 2023-09-27 18:34:47

所以正如标题所说,我的代码无法编译,我现在和以前遇到多个问题,当它的格式不同时,它在某种程度上起作用了。 但是现在代码完全拒绝运行,以我目前的理解水平,我无法找出问题所在,但我相信问题只是我格式化程序的方式,因此它遵循流程图。

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. 你最后一次在外面做同时循环之前,你错过了一个松鼠支架。
  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();
       }
    }
}

程序中有两个错误。首先,在使用变量之前,必须始终对其进行初始化。如果查看 playAgain 变量可以采用的不同路径,则仅在if (guessCount++ == maxGuesses)路径中设置该值。如果条件为 false,您将得到没有任何值的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();
}

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