堆栈总和元素(初级 C#)
stack sum elements (Beginer C#)
我目前正在学习C#语言。我有以下任务:
编写程序:
读取整数输入并将它们添加到堆栈
读取命令直到收到“end”
打印栈中剩余元素的总和
输入
- 在第一行你会收到一个整数数组
- 在接下来的几行中,
在给出“结束”命令之前,您将收到命令 - 一个命令和命令后的一两个数字,具体取决于您给出的命令
- 如果命令是“add”,你总是会在你需要在堆栈中添加的命令之后收到恰好两个数字
- 如果命令是“移除”,
您将始终在命令后收到一个数字,代表您需要从堆栈中删除的数字的计数。如果没有足够的元素跳过命令。
输出
- 当收到“结束”命令时,需要打印栈中剩余元素的总和
输入
1 2 3 4
增加 5 6
删除 3
eNd
输出
总数:6
输入:
3 5 8 4 1 9
加 19 32
删除 10
加 89 22
删除 4
删除 3
结束
输出:
总数:16
这段代码是我写的。从一开始它就起作用了,我输入了一些数字并将它们毫无问题地放入堆栈中。从现在开始,输入我想做的“添加”,“删除”或“结束”后,添加数字后出现错误。在我决定添加一个元素后,程序允许我无限期地输入数字,直到我尝试使用其他两个选项之一更改数字的添加,我收到此错误:System.FormatException: 'Input string was not in a correct format.'
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Stack_Sum
{
class Program
{
static void Main(string[] args)
{
Stack<int> numbers = new Stack<int>();
string input = Console.ReadLine();
string[] number = Regex.Split(input, @"\D+");
foreach (string value in number)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
numbers.Push(i);
}
}
string option = Console.ReadLine();
while (true)
{
switch (option.ToLower())
{
case "add":
int addToStack = Int32.Parse(Console.ReadLine());
for (int i = 0; i < 2; i++)
{
numbers.Push(addToStack);
}
continue;
case "remove":
int popItem = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < popItem; i++)
{
numbers.Pop();
}
continue;
case "end":
foreach (var Stack_Sum in numbers)
{
int sum = 0;
sum += Stack_Sum;
}
break;
}
}
}
}
}
在 while(true)
循环之前,您只要求选项选择 一次:
string option = Console.ReadLine();
之后,您将所有用户输入视为整数,因此用户(您)没有机会更改选项。一个简单的解决方法是将该行 放在循环 中,最好使用更多说明:
//... Your code...
while(true)
{
Console.Write("Add, Remove, End: “);
string option = Console.ReadLine();
switch(option.ToLower())
{
//... Your code...
}
}
现在,我不确定您程序的其余部分是否正常工作,但那是另一回事了。一旦你克服了这个障碍,你就可以用断点来调试它了。
我目前正在学习C#语言。我有以下任务:
编写程序:
读取整数输入并将它们添加到堆栈
读取命令直到收到“end”
打印栈中剩余元素的总和
输入
- 在第一行你会收到一个整数数组
- 在接下来的几行中, 在给出“结束”命令之前,您将收到命令 - 一个命令和命令后的一两个数字,具体取决于您给出的命令
- 如果命令是“add”,你总是会在你需要在堆栈中添加的命令之后收到恰好两个数字
- 如果命令是“移除”, 您将始终在命令后收到一个数字,代表您需要从堆栈中删除的数字的计数。如果没有足够的元素跳过命令。 输出
- 当收到“结束”命令时,需要打印栈中剩余元素的总和
输入
1 2 3 4
增加 5 6
删除 3
eNd
输出
总数:6
输入:
3 5 8 4 1 9
加 19 32
删除 10
加 89 22
删除 4
删除 3
结束
输出:
总数:16
这段代码是我写的。从一开始它就起作用了,我输入了一些数字并将它们毫无问题地放入堆栈中。从现在开始,输入我想做的“添加”,“删除”或“结束”后,添加数字后出现错误。在我决定添加一个元素后,程序允许我无限期地输入数字,直到我尝试使用其他两个选项之一更改数字的添加,我收到此错误:System.FormatException: 'Input string was not in a correct format.'
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace Stack_Sum
{
class Program
{
static void Main(string[] args)
{
Stack<int> numbers = new Stack<int>();
string input = Console.ReadLine();
string[] number = Regex.Split(input, @"\D+");
foreach (string value in number)
{
if (!string.IsNullOrEmpty(value))
{
int i = int.Parse(value);
numbers.Push(i);
}
}
string option = Console.ReadLine();
while (true)
{
switch (option.ToLower())
{
case "add":
int addToStack = Int32.Parse(Console.ReadLine());
for (int i = 0; i < 2; i++)
{
numbers.Push(addToStack);
}
continue;
case "remove":
int popItem = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < popItem; i++)
{
numbers.Pop();
}
continue;
case "end":
foreach (var Stack_Sum in numbers)
{
int sum = 0;
sum += Stack_Sum;
}
break;
}
}
}
}
}
在 while(true)
循环之前,您只要求选项选择 一次:
string option = Console.ReadLine();
之后,您将所有用户输入视为整数,因此用户(您)没有机会更改选项。一个简单的解决方法是将该行 放在循环 中,最好使用更多说明:
//... Your code...
while(true)
{
Console.Write("Add, Remove, End: “);
string option = Console.ReadLine();
switch(option.ToLower())
{
//... Your code...
}
}
现在,我不确定您程序的其余部分是否正常工作,但那是另一回事了。一旦你克服了这个障碍,你就可以用断点来调试它了。