c# - C# Stack 想问他们想吃哪种水果
问题描述
我在这个程序中的目标是将用户想要吃的每个水果推入堆栈并弹出每次输入的最后一个水果 E 表示他们现在想吃,每次用户输入 E 时它都会显示堆栈内容和它如果堆栈已经为空,将显示一条消息。代码不起作用。如何连续添加水果并检查堆栈是否为空?
Stack<string> st = new Stack<string>();
Console.WriteLine("A: Apple");
Console.WriteLine("O: Orange");
Console.WriteLine("M: Mango");
Console.WriteLine("G: Guava");
Console.WriteLine("E: If you want to eat now the fruit");
do {
Console.Write("Enter your choice: ");
string choice = Console.ReadLine();
char fruit = char.Parse(choice);
if (fruit == 'A'){
st.Push("Apple");
}
else if (fruit == 'O'){
st.Push("Orange");
}
else if (fruit == 'M'){
st.Push("Mango");
}
else if (fruit == 'G'){
st.Push("Guava");
}
else if (fruit == 'E'){
st.Pop();
foreach (Object obj in st){
Console.WriteLine(obj);
}
}
else {
Console.WriteLine("Invalid input");
}
Console.WriteLine("\nDo you want to try again? (Y/N)");
}
while(!Console.ReadLine().Equals('N'));
解决方案
一个可能的原因是choice
(null
这会引发ArgumentNullException
您在通话中遇到的异常char.Parse
)。Console.ReadLine
可以返回的事实null
(如果您在控制台上按 Ctrl-Z)经常被忽略。
这意味着:
string choice = Console.ReadLine();
char fruit = char.Parse(choice);
应该可能是:
string choice = Console.ReadLine();
char fruit = char.TryParse(choice, out var result) : result : 'P'; // P meaning invalid input
和:
while (!Console.ReadLine().Equals('N'));
应该是:
while (Console.ReadLine() != "N");
推荐阅读
- pandas - 如何使用 AWS KMS 加密 Pandas/Spark 数据框中的列
- java - 我从一个 JFrame 到另一个 Jframe 的链接不起作用
- javascript - 检查字符串中字符的 ASCII 码值是否大于或小于前一个字符的 ASCII 码值 - JavaScript
- vue.js - VueJS 2 - 组件上的默认点击事件
- object - svg 对象的固定宽度和高度
- python-3.x - Featuretools 深度特征合成 (DFS) 开销极高
- javascript - 使用 fetch 或 new Request() 创建的请求具有未定义的主体
- java - 我可以在 java 中看到这段代码 - 每个类都在扩展 Object 类吗?
- wordpress - 如何翻译 WordPress 网站
- typescript - 如何检查对象是否包含空值?