这是我的第一堂编程课,我很难理解一些概念。
我想做的是弹出一个框,要求用户输入一个整数,这有效。
之后,如果整数为负数,则应显示"输入正数"。然后,如果它是0,它应该说"输入一个非零数字"。
最后,如果是偶数,它应该循环四次,如果它是一个奇数,它应该循环四次。
static void Main(string[] args)
{
Console.WriteLine("Enter an integer:");
string line = Console.ReadLine(); // Read string from console
int value;
if (int.TryParse(line, out value)) // Try to parse the string as an integer
{
Console.Write("Enter a positive number:");
Console.WriteLine(); // Multiply the integer and display it
}
else if (int.TryParse(line, out value))
{
Console.Write("Enter a non-zero number:");
string line1 = Console.ReadLine();
Console.WriteLine();
你的条件分支有点不对劲。您提示用户"输入正数",无论他们输入的整数如何。在你的第一个if
分支中,你需要评估数字是正数还是负数,并弄清楚下一步该怎么做。仅当输入的字符串根本无法解析为整数时,TryParse
才会为 false。
if (int.TryParse(line, out value)) // Try to parse the string as an integer
{
// User entered a valid integer. Now check value<0 or value==0, else do your looping
} else {
// What user entered wasn't an integer at all. Show error.
}
请注意,您实际上不需要再读取用户的任何输入。您需要的所有信息在第一次ReadLine
后可用。
整数可以是负数,因此您的测试不正确。"-12"将按预期解析为整数 -12。因此,您需要测试整数是否大于 0。
此外,正如"D Standley"所说,如果你想继续要求用户输入一个正整数,你可能需要一个循环。下面的代码 sh
static void Main(string[] args)
{
int value = 0;
while(value < 1)
{
Console.WriteLine("Enter a positive integer:");
string line = Console.ReadLine(); // Read string from console
if (int.TryParse(line, out value) && value <= 0)
{
Console.WriteLine("Input is not a positive integer. Try again");
}
}
Console.WriteLine("Value=" + value);
Console.ReadKey();
}
应该有几个变量,以便您可以跟踪需要执行多少循环:
int evenNumbersEntered = 0;
int oddNumbersEntered = 0;
然后,您应该创建一个 while 循环,该循环将继续从用户那里获取输入,直到两个计数器中的一个达到4
// Our requirement is to loop 4 times if an even integer
// is entered and 4 times if an odd integer is entered.
while (evenNumbersEntered < 4 && oddNumbersEntered < 4)
{
// Get user input here
}
获取用户输入时,只需执行一次int.TryParse
。如果成功,它将返回true
,否则false
.如果成功,则从字符串解析的整数将存储在变量 value
中。
int value;
Console.Write("Please enter a positive integer: ");
string line = Console.ReadLine();
bool validInteger = int.TryParse(line, out value);
现在我们从用户那里获得了一些输入,我们需要弄清楚他们输入了什么并显示一条消息或增加我们的一个计数器。
我们知道,如果TryParse
失败,则用户没有输入整数,我们应该显示错误消息。
if (!validInteger)
{
// TryParse failed, which means the user entered a non-integer string
Console.WriteLine("ERROR: {0} is not a valid integer.", line);
}
否则,如果 TryParse 成功,则应检查value
是否小于零(或零(,并显示相应的错误消息。
else if (value < 0)
{
Console.WriteLine("ERROR: {0} is a negative integer.", line);
}
else if (value == 0)
{
Console.WriteLine("ERROR: {0} is zero.", line);
}
最后,如果 TryParse 成功并且值不是 <= 0,那么您应该检查该值是偶数还是奇数,并为循环增加适当的计数器变量。
else if (value % 2 == 0)
{
Console.WriteLine("Thank you! {0} is an even integer.", line);
evenNumbersEntered++;
}
else
{
Console.WriteLine("Thank you! {0} is an odd integer.", line);
oddNumbersEntered ++;
}
当这两个计数器中的一个到达4
时,while
循环将退出。此时,您可能希望向用户显示一些信息,并暂停程序,以便他们可以阅读它。
// After the while loop
Console.WriteLine("You entered {0} even numbers and {1} odd numbers",
evenNumbersEntered, oddNumbersEntered);
Console.Write("Press any key to exit...");
Console.ReadKey();
这是一个类似的答案,它根据如何分析问题以及每个步骤的作用对其进行了分解。
"我想做的是弹出一个框,要求用户输入一个 整数,这行得通。
您已经满足了以下条件:
Console.Write("Please enter an integer: ");
var input = Console.ReadLine();
-
"之后,如果整数为负数,则应说"输入正数 数"。然后,如果它是0,它应该说"输入一个非零数字"。
对于这部分,我们需要做几件事:
- 检查用户是否实际输入了整数
- 检查输入是否为负数
- 检查输入是否为零
为此,我们将使用 int.TryParse()
.此方法需要string
进行分析,以及一个out
整数参数,该参数将包含从字符串解析的整数(out
参数是该方法保证在返回时将设置为某个值的参数(。
如果int.TryParse()
能够成功将字符串转换为整数,则返回true
,否则返回false
。所以实际上,我们从这种方法中得到了两件事:
-
true
或false
返回值(回答问题:"字符串是整数吗? out
参数,它将包含整数(如果解析成功(
我们创建两个变量来捕获int.TryParse
的输出:
- 捕获返回值的
boolean
- 捕获从字符串解析的 int 的
integer
代码如下所示:
int value;
bool success = int.TryParse(input, out value);
因此,为了回答第一个问题"用户是否输入了一个整数",我们检查 success
的值,其中包含来自 int.TryParse
的返回值:
if (success == false)
{
Console.WriteLine("The value entered is not a valid integer");
}
为了回答第二个问题,"整数是否为负",我们检查了"值"的值
else if (value < 0)
{
Console.WriteLine("The value entered is negative");
}
为了回答第三个问题,"整数为零吗",我们再次检查"价值"的值
else if (value == 0)
{
Console.WriteLine("The value entered is zero");
}
-
"最后,如果它是一个偶数,它应该循环四次,它 如果是奇数,应该循环四次。
现在它变得越来越棘手。当用户输入有效整数时,我们需要确定它是奇数还是偶数。无论哪种情况,听起来我们只会让他们输入一种类型的 4 个。这将需要一个循环结构,我们一遍又一遍地执行代码,直到用户输入 4 个偶数或 4 个奇数。
循环构造始终有一个条件,即它检查每次迭代以确定它是否应该继续循环或退出。由于我们的条件是:"用户输入了 4 个偶数或 4 个奇数",我们需要创建几个变量来跟踪这些值。变量将在循环的每次迭代中检查,并将使用循环中的新值进行更新(当用户输入偶数或奇数时(。
创建变量很容易,只需int
几秒即可跟踪输入了多少奇数和偶数:
int oddNumbersEntered = 0;
int evenNumbersEntered = 0;
将它们作为条件添加到循环中也不是太难。由于我们想在两者之一达到 4 时停止循环,我们将写一些内容,"虽然 oddNumbersEntered 小于 4,evenNumbersInput 小于 4,但请继续从用户那里获取输入":
// As soon as one of these variables equals '4', the loop will quit
while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
{
// Get user input (this is the code above)
}
但是我们还需要在用户输入偶数或奇数时用新值更新这些变量,否则循环将永远持续下去。
我们如何知道一个数字是偶数还是奇数?最简单的方法是将其除以 2,看看是否有余数。如果余数为 0,则它是偶数,否则为奇数。
为了检查除法运算的余数,我们使用模运算符(%
(,它就像除法一样,只是它返回余数。例如,10 % 3 = 1
因为 3 进入 10 三次,余数为 1。
while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
{
// Get user input (this is the code above)
if (value % 2 == 0)
{
evenNumbersEntered++; // This increments our even number counter by one
}
else
{
oddNumbersEntered++; // This increments our odd number counter by one
}
}
因此,这应该为我们提供一个工作程序,但是由于控制台应用程序将在处理完成后退出,并且我们希望用户看到一些结果,因此我们将在末尾添加一些代码,向用户显示结果,然后在完成阅读后提示他们按一个键。
让我们向他们展示他们输入了多少奇数和偶数:
Console.WriteLine("All done! You entered {0} even and {1} odd numbers",
evenNumbersEntered, oddNumbersEntered);
现在,我们将等待他们按下一个键,然后再退出:
Console.Write("Press any key to exit...");
Console.ReadKey();
这部分在 while 循环的末尾进行。
将一切整合在一起
当我们将所有代码放在一起时,我们得到的东西看起来像:
int oddNumbersEntered = 0;
int evenNumbersEntered = 0;
// As soon as one of these variables equals '4', the loop will quit
while (oddNumbersEntered < 4 && evenNumbersEntered < 4)
{
Console.Write("Please enter an integer: ");
var input = Console.ReadLine();
int value;
bool success = int.TryParse(input, out value);
if (success == false)
{
Console.WriteLine("The value entered is not a valid integer");
}
else if (value < 0)
{
Console.WriteLine("The value entered is negative");
}
else if (value == 0)
{
Console.WriteLine("The value entered is zero");
}
else if (value % 2 == 0)
{
evenNumbersEntered++; // This increments our even number counter by one
}
else
{
oddNumbersEntered++; // This increments our odd number counter by one
}
}
Console.WriteLine("All done! You entered {0} even and {1} odd numbers",
evenNumbersEntered, oddNumbersEntered);
Console.Write("Press any key to exit...");
Console.ReadKey();