创建一个由三组连续的相同元素组成的数组

时间:2019-01-13 21:32:15

标签: c#

由于我正在学习使用C#进行编程,因此我尝试解决以下问题,对我来说,这似乎有点困难,请提供帮助:

创建一个由三部分连续的相同元素组成的数组。

以下是我到目前为止提出的内容:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Array3NumbersApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = 99;
            int[] buffer = new int[n];
            Random rnd = new Random();

            for (int i = 2; i < buffer.Length; i++)
            {

                if (i % 3 == 0)
                {
                    int k = rnd.Next(1, 30);
                    buffer[i] = k;
                    buffer[i-1] = k;
                    buffer[i-2] = k;
                }
            }

            for (int i = 2; i < buffer.Length; i++)
            {
                Console.Write(buffer[i -2 ] + " " + buffer[i-1] + " " + buffer[i] + " ");
            }
        }
    }
}

任何人都可以建议我在该程序中做错了什么吗?

我得到的结果,例如:

  

0 29 29 29 29 29 29 29 1 29 1 1 1 1 1 1 1 18 1 18 18 18 18 18 18 18 18 20 18 20 20 20 20 20 20 20 20 25 20 25 25 25 ...

这不是预期的,对吧?

请注意,这不是家庭作业,而是我尝试掌握数组的方法...预先感谢您的评论!非常感谢您的帮助。

5 个答案:

答案 0 :(得分:3)

我知道您可能还没有学习LINQ,但是为了完整起见,这里是LINQ解决方案:

var list = Enumerable
    .Range(0,100)
    .Select( n => rnd.Next(1,30) )
    .SelectMany( n => new int[] { n, n, n } )
    .ToArray();

答案 1 :(得分:2)

嗯,您已接近解决方案。 我可以为您提供帮助,但是我想您可能想自己解决这个问题,所以我只给您提供一个提示:

您已经知道应该像这样向后三倍填充数组:

int k = rnd.Next(1, 30);
buffer[i] = k;
buffer[i-1] = k;
buffer[i-2] = k;

现在,我认为您已经知道要在这些索引上执行这些语句(2,5,8,...)

现在,您有了3个索引的“跳转”,算术级数很好。从i = 2开始。听起来,您需要对for循环进行小调整:)

编辑:

更多实践

如果您想进一步执行此任务,以便可以进行更多练习,请尝试避免在连续迭代中'rnd'生成相同数字的情况(这样一来,您将不会获得29 29 29 29 29 29不是三倍,而是连续六个相同)...

答案 2 :(得分:1)

您的第一个循环将丢失元素0,因为i的初始值不能被3整除。i == 3是您首次输入i-2的分配块,这意味着要初始化的第一个元素是1(第二个值)。您的第二个循环显然是错误的。您正在逐个遍历每个元素,但仍在进行写行,就好像只在执行第三个元素一样。这意味着即使基础数组将按预期填充,您也会多次输出元素。只需在第二个循环中写出当前值,然后在第一个循环中将i ++替换为i + = 3并按照Kalten的建议删除mod 3条件。

答案 3 :(得分:1)

我唯一要做的更改是删除对i % 3 == 0的检查,然后将循环变量增加3。然后,最后,只按顺序输出数组(不需要在此做任何特殊的操作) )。

private static void Main()
{
    int n = 99;
    int[] buffer = new int[n];
    Random rnd = new Random();

    for (int i = 2; i < buffer.Length; i += 3)
    {
        int k = rnd.Next(1, 30);
        buffer[i] = k;
        buffer[i - 1] = k;
        buffer[i - 2] = k;
    }

    foreach (int t in buffer)
    {
        Console.Write(t + " ");
    }

    Console.ReadKey();
}

答案 4 :(得分:1)

希望它可以帮助您了解;-)

    for (int i = 0; i < buffer.Length; i += 3) // normally you should always start with i = 0
        {

            //if (i + 1 % 3 == 0) // no need for this anymore, we got i += 3
            //{
            //}
                int k = rnd.Next(1, 30);
                buffer[i] = k;
                buffer[i+1] = k;
                buffer[i+2] = k;

            Console.Write($"{k} {k} {k} ");
        }

        //for (int i = 0; i < buffer.Length; i += 3) // skip the whole loop because it is/ was the same as the one above
        //{
        //}