使用列表和数组进行切换和大小写
Posted
技术标签:
【中文标题】使用列表和数组进行切换和大小写【英文标题】:Switch and case with lists and arrays 【发布时间】:2017-04-10 18:33:59 【问题描述】:我一直在尝试制作一个程序,让用户选择一个选项,然后我为每个选项使用一个开关盒。我最大的问题是案例 1、2、4。
在案例 1 中:在这里,用户可以通过列表输入任意数量的字符串。
案例 2:这里我希望用户能够通过数组输入 4 个字符串。
案例 3:打印出案例 1(列表)中的所有字符串。
案例4:打印出案例2(数组)中的所有字符串。
案例5:退出程序
我知道案例 1,2 和 4 中的代码肯定是错误的,但我似乎找不到任何好的答案,我已经在网上搜索了很长时间。
代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryggsäcken
class MainClass
public static void Main(string[] args)
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
while (running)//Här skapas loopen
Console.WriteLine("\nVälkommen till ryggsäcken!");
Console.WriteLine("\n[1] Lägg till flera föremål i stora facket");
Console.WriteLine("[2] Lägg till 4 föremål i lilla facket");
Console.WriteLine("[3] Skriv ut innehållet i stora facket");
Console.WriteLine("[4] Skriv ut inehållet i lilla facket");
Console.WriteLine("[5] Avsluta");
Console.Write("\nVälj: ");
int option = Convert.ToInt32(Console.ReadLine());//Konverterar från string till Int
switch (option)
case 1:
Console.Write("Lägg till föremål i ryggsäcken: ");
List<string> mylist = new List<string> ;
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
break;
case 2:
Console.WriteLine("Skriv in 4 föremål");
string[] answer = new string[5];
for (int i = 0; i < answer.Length; i++)
answer[i] = Console.ReadLine();
break;
case 3:
foreach (string item in mylist)
Console.WriteLine(item);
break;
case 4:
Console.Writeline(answer[i]);
break;
case 5:
running = false;
【问题讨论】:
您需要将 mylist 和 answer 存储在此函数的最顶层,而不是在 case(s) 中。然后您需要在案例 3 和 4 中进行检查,以确保这些值已初始化或具有有效信息,然后仅打印列表或答案。 有什么问题?代码没有编译吗?您是否遇到运行时异常?你有具体的错误信息吗? @MatiasCicero 是的,在案例 4 中我收到错误消息:System.console 不包含 Writeline 的定义 @ApolloSoftware 你的意思是我应该在 while 循环之前移动我拥有的关于我的列表和回答的所有内容吗?还有,在案例 3 和 4 中进行检查是什么意思。抱歉,我的速度很慢,对此有点新意。 @mackanmorre 那是因为System.Console
不包含Writeline
的定义。请重新阅读错误消息,它实际上非常具有描述性。 (提示:也许你的意思是WriteLine
?)
【参考方案1】:
您需要初始化 mylist 并在本课程的***别回答,而不是在案例中。然后您需要在案例 3 和 4 中进行检查,以确保这些值已初始化或具有有效信息或其中包含多个元素,然后仅打印列表或答案。你甚至可以写一个 then writeline 语句说“嘿,你的变量还没有初始化或者你需要输入值”。或某种程度的东西。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryggsäcken
public class MainClass
public static void Main(string[] args)
List<string> mylist = new List<string> ;
string[] answer = new string[5];
bool running = true;//Ger ett booleskt värde till variabeln running för att kunna skapa en loop
while (running)//Här skapas loopen
Console.WriteLine("\nVälkommen till ryggsäcken!");
Console.WriteLine("\n[1] Lägg till flera föremål i stora facket");
Console.WriteLine("[2] Lägg till 4 föremål i lilla facket");
Console.WriteLine("[3] Skriv ut innehållet i stora facket");
Console.WriteLine("[4] Skriv ut inehållet i lilla facket");
Console.WriteLine("[5] Avsluta");
Console.Write("\nVälj: ");
int option = Convert.ToInt32(Console.ReadLine());//Konverterar från string till Int
switch (option)
case 1:
Console.Write("Lägg till föremål i ryggsäcken: ");
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
mylist.Add(Console.ReadLine());
break;
case 2:
Console.WriteLine("Skriv in 4 föremål");
for (int i = 0; i < answer.Length; i++)
answer[i] = Console.ReadLine();
break;
case 3:
if (mylist.Count > 0)
foreach (string item in mylist)
Console.WriteLine(item);
break;
case 4:
if (answer.Length > 0)
for (int i = 0; i < answer.Length; i++)
Console.WriteLine(answer[i]);
break;
case 5:
running = false;
break;
【讨论】:
谢谢我现在试过了。但我仍然收到 3 条错误消息。 /Users/marcusnordemar/Desktop/Skärmavbild 2017-04-10 kl。 22.56.00.png WriteLine 中的 L 需要大写。 好的,我知道你现在所说的了。我收到的错误消息是:if (mylist.Length > 0) 不包含 Length 的定义。 if (answer.Count > 0) operator > 不能应用于“方法组”和“int”类型的操作数。最后一个是: Console.WriteLine(answer[i]);当前上下文中不存在名称“i” 谢谢,现在没有编译错误了。我唯一的问题是,当我使用选项 3 或 4 时,它不会打印出任何内容。 我把它移到了while循环之外,现在它可以工作了,谢谢!【参考方案2】:你必须在while循环之外声明列表,否则每次运行后它都会被删除。
List<string> mylist = new List<string> ();
while(running)
...
在情况 1 中,您应该添加一个带有 break 语句的循环,例如:
case 1:
Console.Write("Lägg till föremål i ryggsäcken: ");
while(true)
string lineEntered = Console.ReadLine();
//Now here comes the break operator
if(lineEntered == "stopImDone")
break;
mylist.Add(lineEntered);
break;
案例4应该更像
case 4:
foreach(string i in awnser)
Console.WriteLine(i);
break;
这样输入的所有字符串都会显示出来。
【讨论】:
以上是关于使用列表和数组进行切换和大小写的主要内容,如果未能解决你的问题,请参考以下文章