【问题标题】:Set max sum of array before displayed C#在显示C#之前设置数组的最大总和
【发布时间】:2014-03-23 10:44:31
【问题描述】:

所以我是 C# 的新手,我正在制作一个基本程序,它将随机值分配给 6 个数组。

    private void button1_Click(object sender, EventArgs e)
    {
        tbxA.Clear();
        tbxB.Clear();

        int[] number = new int[6];
        Random m = new Random();

        for (int i = 0; i < 6; i++)
        {
            number[i] = m.Next(0, 4);
            tbxA.AppendText("" + Convert.ToString(number[i]) + "\n");
        }

        int sum = number.Sum();
        if (sum > 8)
        {
            tbxB.AppendText(" " + sum);
        }
    }

这将在文本框A中显示随机生成的数组数字1-6,如果它们的总和超过8,它将在文本框B中显示总和。

但是,我在这里要做的是,数组中的数字仅在它们的总和大于 8 时显示在文本框 A 中。如果它们的总和小于 8,则应为数组自动生成新数字,直到它符合要求总和 > 8。

我尝试使用另一个 for 循环,其中包含所有内容以及 ifs,但这会导致程序崩溃。

【问题讨论】:

    标签: c# arrays sum max


    【解决方案1】:

    试试这个...但请记住,由于您使用的是随机数,因此可能需要一段时间才能满足条件,并且可能看起来像无限循环

    private void button1_Click(object sender, EventArgs e)
        {
            tbxA.Clear();
            tbxB.Clear();
    
            int[] number = new int[6];
            Random m = new Random();
            while(true)
            {
                for (int i = 0; i < 6; i++)
                {
                    number[i] = m.Next(0, 4);
                    tbxA.AppendText(number[i].ToString() + Environment.NewLine);
                    //tbxA.AppendText("" + Convert.ToString(number[i]) + "\n");
                }
    
                int sum = number.Sum();
                if (sum > 8)
                {
                    tbxB.AppendText(" " + sum);
                    break;
                }
                else{
                    tbxA.Clear();
                    tbxB.Clear()
                }
            }
        }
    

    或者如果您想要其他号码但不想替换已添加的旧号码..

    private void button1_Click(object sender, EventArgs e)
        {   
            tbxA.Clear();
            tbxB.Clear();
    
            //int[] number = new int[6];
            List<string> number = new List<string>();
            Random m = new Random();
            while(true)
            {
                for (int i = 0; i < 6; i++)
                {
                    number.Add(m.Next(0, 4));
                }
    
                int sum = number.Sum();
                if (sum > 8)
                {
                    tbxA.AppendText(string.Join("Environment.NewLine", number.ToArray()))
                    tbxB.AppendText(" " + sum);
                    break;
                }
    
            }
        }
    

    【讨论】:

    • 你也可以考虑使用这一行:tbxA.AppendText(number[i].ToString() + Environment.NewLine);
    • 谢谢!第二个代码并没有真正起作用,因为它在数字处给了我红色。添加行,我不知道你放在底部的东西是什么意思。但是第一个代码就像我想要的那样工作:)
    • @Jokuc 第二个使用列表。它现在可以工作,因为它之前有一个额外的分号。。现在尝试阅读更多stackoverflow.com/questions/5777729/…
    【解决方案2】:

    听起来您正在寻找一个 while 循环。继续循环,直到总和大于 8。

            int i = 0;
            while (number.Sum() < 8 && number.Length > i)
            {
                number[i++] = m.Next(0, 4);
                tbxA.AppendText("" + Convert.ToString(number[i]) + "\n");
            }
    

    编辑:您还需要考虑向数组添加更多值。您可能遇到错误的原因是您正在创建一个 6 元素数组。您将需要创建一个动态数组,在您的数组中分配更多空间,或者使用类似 List 的东西,您可以不断添加更多值。

    Edit2:编辑循环。请记住,如果您创建了一个包含 6 个元素的数组,那么您就不能再添加了。所以你必须创建一个更大的数组:

    int[] number = new int[10];
    

    或类似的东西。上述解决方案假设您的数组足够大以继续添加值。如果没有,您将不得不处理。

    【讨论】:

    • 那是一个无限循环。
    • 它没有用,它冻结了整个程序:/我不知道如何使用列表或动态数组..
    • 相应编辑。抱歉,只是提出了一些想法,而不是完全实施的解决方案。
    猜你喜欢
    • 2012-10-14
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2020-10-23
    相关资源
    最近更新 更多