使用列表和数组进行切换和大小写

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;
    

这样输入的所有字符串都会显示出来。

【讨论】:

以上是关于使用列表和数组进行切换和大小写的主要内容,如果未能解决你的问题,请参考以下文章

在fastReport中怎样使用自定义的纸张大小

如何在Java中创建数组列表

绘制程序未使用并行数组正确存储大小和颜色

C语言数组寻址

Arrays.asList():返回指定数组支持的固定大小列表

linux 输入法大小写如何转换