代码无法编译,我不明白这些错误的用途
本文关键字:错误 明白 编译 代码 | 更新日期: 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();
}
}
}
两个问题:
- 在
- 你最后一次在外面做同时循环之前,你错过了一个松鼠支架。
- 声明时,需要初始化"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();
}
如果你保持你的函数很小,你也可以避免大量放错位置的括号。