【问题标题】:Add user input to Array in steps C#?在步骤 C# 中将用户输入添加到数组?
【发布时间】:2016-11-27 13:23:43
【问题描述】:

我在学校有一个任务说我应该创建一个类似于背包的程序,我应该在其中使用数组和列表。

背包的功能是能够将4个物品放入较小的隔间(ytterfack),然后将无限数量的物品放入大隔间(stora facket)。

我希望它与一个菜单一起使用,用户可以在其中将一项放入 (ytterfack),如果用户愿意,切换到 (stora fack) 并将一项放入该菜单.也就是说,我试图避免为 (ytterfack) 使用 for 循环,这意味着用户可以选择将 4 个对象放入 (ytterfack) 中。

有没有一种方法可以创建一个数组,让用户一次将元素放入一个数组中,甚至在数组已满时发出一条消息?

class Program
{
    static void Main(string[] args)
    {

        Console.WriteLine("\tVälkommen till Ryggsäcken!!\n");
        Console.WriteLine("\t[1] Lägg till ett föremål i det stora facket");
        Console.WriteLine("\t[2] Lägg till ett föremål i ytterfacket");
        Console.WriteLine("\t[3] Skriv ut innehållet i stora facket");
        Console.WriteLine("\t[4] Skriv ut innehållet i ytterfacket");
        Console.WriteLine("\t[5] Rensa innehållet i stora facket");
        Console.WriteLine("\t[6] Rensa innehållet i ytterfacket");
        Console.WriteLine("\t[7] Avsluta\n");

        string[] ytterFack = new string[4];
        List<string> storaFacket = new List<string> { };
        int i = 0;

        bool kör = true;

        do 
        {
            Console.Write("\n\tVälj punkt från menyn: ");
            int menyVal = Convert.ToInt32(Console.ReadLine());

            switch (menyVal) 
            {
                case 1:
                    Console.Write("\n\tSkriv in ett föremål: ");
                    storaFacket.Add(Console.ReadLine());
                    //Console.WriteLine("\n\tDu har lagt in " +  + " Tack!\n");
                    break;
                case 2:
                    Console.Write("\n\tSkriv in ett föremål: ");
                    ytterFack[i] = Console.ReadLine();
                    //Console.WriteLine("\n\tDu har lagt in " + ytterFack[i] + " Tack!\n");
                    break;

                case 3:
                    Console.WriteLine("\tInnehållet i stora facket är:");
                    foreach (string item in storaFacket)
                    {
                        Console.WriteLine("\t" + item);
                    }
                    break;
                case 4:
                    Console.WriteLine("\tInnehållet i ytterfacket är:");
                    foreach (string item in ytterFack)
                    {
                        Console.WriteLine("\t" + item);
                    }
                    break;
                case 5:
                    storaFacket.Clear();
                    Console.WriteLine("\tNu är stora facket tömt!\n");
                    break;
                case 6:
                    Array.Clear(ytterFack, 0, ytterFack.Length);
                    Console.WriteLine("\tNu är ytterfacket tömt!\n");
                    break;
                case 7:
                    kör = false;
                    break; 
                default:
                    break;

            }
        }
        while (kör);
    }
}

【问题讨论】:

  • 对不起,代码......正如你所看到的,它并不完整,但我想给你们一个提示,它将会变成什么。
  • 可以实现栈逻辑,不使用for循环。它只需要很少的变量需要递增和递减。
  • 好的,我会看看我能找到关于堆栈逻辑的信息,谢谢
  • 看来您已经掌握了这口井的外壳。情况 1:您正在正确添加到列表中,因为没有限制。在情况 2:这将添加到小隔间中,您当前的代码将仅在此处添加 1 项,因为“i”永远不会增加。此外,您可能想在此处检查小隔间(数组ytterFack)是否已装满 4 个项目,然后再添加第 5 个。只是一个想法。
  • 这就是你使用 List() 对象而不是 array[] 的原因。列表对象有一个 add 方法,而数组没有。

标签: c# arrays loops


【解决方案1】:

不要在 Main() 中做所有事情,而是先将 BackPack 建模为一个单独的类 - 这样您就可以一致地实施和应用约束(例如最多 4 个项目),即使您使用 List&lt;string&gt; 来表示两者:

public class BackPack
{
    private List<string> ytterFacket = new List<string>();
    public List<string> YtterFacket
    {
        get {
            return ytterFacket;
        }
    }

    private List<string> storaFacket = new List<string>();
    public List<string> StoraFacket
    {
        get {
            return storaFacket;
        }
    }

    public string PutIntoYtterFacket(string item)
    {
        if (ytterFacket.Count < 4)
        {
            ytterFacket.Add(item);
            return string.Format("Du har lagt in {0}! Tack!", item);
        }
        return string.Format("Kan inte lägge till {0}, gräns nådd", item);
    }

    public string PutIntoStoraFacket(string item)
    {
        storaFacket.Add(item);
        return string.Format("Du har lagt in {0}! Tack!", item);
    }

    public string ClearYtterFacket()
    {
        ytterFacket.Clear();
        return "Nu är ytterfacket tömt!";
    }

    public string ClearStoraFacket()
    {
        storaFacket.Clear();
        return "Nu är storafacket tömt!";
    }
}

所以添加到ytterFacket 的情况变成(假设fjallravenBackPack 类的一个实例):

Console.Write("\n\tSkriv in ett föremål: ");
fjallraven.PutIntoYtterFacket(Console.ReadLine());

您不必在case 块中进行错误处理,BackPack 实例将为您完成! (抱歉出现错误字符串,我的瑞典语有点生疏)

【讨论】:

  • 谢谢,但部分任务是使用 Array 作为较小的隔间,将 List 用于较大的隔间。但我真的很喜欢你的解决方案。
  • @Tarbh 很公平,你也可以这样做 - 我更想传达将背包的行为封装在一个单独的类中的想法
  • 这对我作为学生的我来说是一个很好的例子,我非常感谢,谢谢
【解决方案2】:

好的,就是这样。

我希望能对此发表一两条评论,我可以做些什么更好或更简单的方法??

        Console.WriteLine("\tVälkommen till Ryggsäcken!!\n");
        Console.WriteLine("\t[1] Lägg till ett föremål i det stora facket");
        Console.WriteLine("\t[2] Lägg till ett föremål i ytterfacket");
        Console.WriteLine("\t[3] Skriv ut innehållet i stora facket");
        Console.WriteLine("\t[4] Skriv ut innehållet i ytterfacket");
        Console.WriteLine("\t[5] Rensa innehållet i stora facket");
        Console.WriteLine("\t[6] Rensa innehållet i ytterfacket");
        Console.WriteLine("\t[7] Avsluta\n");

        string[] ytterFack = new string[4];
        List<string> storaFacket = new List<string> { };
        int i = 0;

        bool kör = true;

        do 
        {
            Console.Write("\n\tVälj punkt från menyn: ");

            try
            {
                int menyVal = Convert.ToInt32(Console.ReadLine());

                switch (menyVal)
                {
                    case 1:
                        Console.Write("\n\tSkriv in ett föremål: ");
                        storaFacket.Add(Console.ReadLine());
                        //Console.WriteLine("\n\tDu har lagt in " +  + " Tack!\n");
                        break;
                    case 2:
                        Console.Write("\n\tSkriv in ett föremål: ");

                        if (ytterFack[0] == null)
                        {
                            ytterFack[0] = Console.ReadLine();
                            break;
                        }

                        else if (ytterFack[1] == null)
                        {
                            ytterFack[1] = Console.ReadLine();
                            break;
                        }
                        else if (ytterFack[2] == null)
                        {
                            ytterFack[2] = Console.ReadLine();
                            break;
                        }
                        else if (ytterFack[3] == null)
                        {
                            ytterFack[3] = Console.ReadLine();
                            break;
                        }


                        else
                        {
                            Console.WriteLine("\n\tFacket är fullt och måste tömmas innan du kan lägga ner föremål här.");
                            break;
                        }
                        break;

                    case 3:
                        Console.WriteLine("\n\tInnehållet i stora facket är:\n");
                        foreach (string item in storaFacket)
                        {
                                Console.WriteLine("\t" + item);
                        }
                        break;
                    case 4:
                        Console.WriteLine("\n\tInnehållet i ytterfacket är:\n");
                        foreach (string item in ytterFack)
                        {
                            Console.WriteLine("\t" + item);
                        }
                        break;
                    case 5:
                        storaFacket.Clear();
                        Console.WriteLine("\n\tNu är stora facket tömt!\n");
                        break;
                    case 6:
                        Array.Clear(ytterFack, 0, ytterFack.Length);
                        Console.WriteLine("\n\tNu är ytterfacket tömt!\n");
                        break;
                    case 7:
                        kör = false;
                        break;
                    default:
                        Console.WriteLine("\n\tDu måste välja från menyn, [1] - [7]");
                        break;

                }
            }
            catch
            {
                Console.WriteLine("\n\tDu kan bara mata in ett val (en siffra) från menyn!");
            }
        }
        while (kör);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2017-10-27
    • 2016-05-03
    相关资源
    最近更新 更多