如何在 C# 控制台中使用用户输入添加推入堆栈
How to add a push in stack using a user input in C# console
我坚持在用户输入数据时添加推送。程序的功能是这样的,当我输入像字母 A 这样的键时,它会添加到堆栈并显示堆栈有 1 个实体。但是我卡住了,应该是当我输入另一个键时它会添加到堆栈中。这是我的代码。
while (true)
{
string letter = null;
Console.WriteLine("Enter A = Apple, O = Orange, M = Mango, G = Guava");
letter = Console.ReadLine();
if (letter == "a")
{
Stack<string> myStack = new Stack<string>();
myStack.Push(letter);
Console.WriteLine("Fruits in the basket x " + myStack.Count);
if(letter == "o") {
myStack.Push(letter);
Console.WriteLine("Fruits in the basket x " + myStack.Count);
}
任何建议和帮助将不胜感激!提前谢谢你!
进入 if (letter == "a")
语句后,您永远不会重新分配字母。所以当它到达 if(letter == "o")
时,字母仍然等于“a”。
在第二个 if 语句之上,您需要添加 letter = Console.ReadLine();
,如下所示:
letter = Console.ReadLine();
if(letter == "o")
这里有不少错误。让我们列出它们
嵌套 if
s.
您的 if(letter == "o")
嵌套在检查 if (letter = "a")
中,这意味着它将始终为 false
Console.ReadLine()
returns 在按下 Enter
之后,而不是在按下任意键之后
Console.ReadLine()
不会 return 每个单独的按键在它们发生后按下,它 return 是整个字符序列(a.k.a 一个字符串)仅在您按下 Enter
在 a
的 if 语句中声明您的 Stack
如果我想添加一个橙子作为我的第一个项目怎么办?这将引发异常(如果您修复了嵌套的 if 问题),因为在尝试访问它时不会定义它。每次添加一个苹果时,它也会 re-create 堆栈,这意味着,堆栈将被清除,您的堆栈中永远不能有超过 1 个苹果。
重复代码
在你所有的 if 语句中都是完全相同的代码,所以不需要多个语句,只需要一个检查字母是否是我们接受的任何语句
修复方法如下:
// Declare myStack once, so it doesn't get reset every time we add an Apple
Stack<char> myStack = new Stack<char>();
while (true)
{
Console.WriteLine("A = Apple, O = Orange, M = Mango, G = Guava");
// Use Console.ReadKey not ReadLine to capture each key press separately
// The 'true' parameter prevents the console from showing what character we pressed
ConsoleKeyInfo keyPressed = Console.ReadKey(true);
char characterPressed = keyPressed.KeyChar;
if (characterPressed == 'a' || characterPressed == 'o' || characterPressed == 'm' || characterPressed == 'g')
{
myStack.Push(characterPressed);
}
else
{
Console.WriteLine("You pressed a non-valid character");
}
Console.WriteLine("Fruits in the basked x " + myStack.Count);
}
我坚持在用户输入数据时添加推送。程序的功能是这样的,当我输入像字母 A 这样的键时,它会添加到堆栈并显示堆栈有 1 个实体。但是我卡住了,应该是当我输入另一个键时它会添加到堆栈中。这是我的代码。
while (true)
{
string letter = null;
Console.WriteLine("Enter A = Apple, O = Orange, M = Mango, G = Guava");
letter = Console.ReadLine();
if (letter == "a")
{
Stack<string> myStack = new Stack<string>();
myStack.Push(letter);
Console.WriteLine("Fruits in the basket x " + myStack.Count);
if(letter == "o") {
myStack.Push(letter);
Console.WriteLine("Fruits in the basket x " + myStack.Count);
}
任何建议和帮助将不胜感激!提前谢谢你!
进入 if (letter == "a")
语句后,您永远不会重新分配字母。所以当它到达 if(letter == "o")
时,字母仍然等于“a”。
在第二个 if 语句之上,您需要添加 letter = Console.ReadLine();
,如下所示:
letter = Console.ReadLine();
if(letter == "o")
这里有不少错误。让我们列出它们
嵌套
if
s.
您的if(letter == "o")
嵌套在检查if (letter = "a")
中,这意味着它将始终为 falseConsole.ReadLine()
returns 在按下Enter
之后,而不是在按下任意键之后
Console.ReadLine()
不会 return 每个单独的按键在它们发生后按下,它 return 是整个字符序列(a.k.a 一个字符串)仅在您按下Enter
在
a
的 if 语句中声明您的 Stack 如果我想添加一个橙子作为我的第一个项目怎么办?这将引发异常(如果您修复了嵌套的 if 问题),因为在尝试访问它时不会定义它。每次添加一个苹果时,它也会 re-create 堆栈,这意味着,堆栈将被清除,您的堆栈中永远不能有超过 1 个苹果。重复代码
在你所有的 if 语句中都是完全相同的代码,所以不需要多个语句,只需要一个检查字母是否是我们接受的任何语句
修复方法如下:
// Declare myStack once, so it doesn't get reset every time we add an Apple
Stack<char> myStack = new Stack<char>();
while (true)
{
Console.WriteLine("A = Apple, O = Orange, M = Mango, G = Guava");
// Use Console.ReadKey not ReadLine to capture each key press separately
// The 'true' parameter prevents the console from showing what character we pressed
ConsoleKeyInfo keyPressed = Console.ReadKey(true);
char characterPressed = keyPressed.KeyChar;
if (characterPressed == 'a' || characterPressed == 'o' || characterPressed == 'm' || characterPressed == 'g')
{
myStack.Push(characterPressed);
}
else
{
Console.WriteLine("You pressed a non-valid character");
}
Console.WriteLine("Fruits in the basked x " + myStack.Count);
}