为什么不是所有的数组值都在 C# 中打印?

why are not all array values printed in c#?

为什么如果我将数组值存储在变量“temp1”和“temp2”中,控制台只打印值 2、2 和 4?

     static void Main(string[] args)
        {
            //Declaración de arreglos solicitados.
            double[] array6 = { 3, 2, 1, 2, 3, 4, 3 }; // true

            //Imprimimos resultado de funcion "mismaDiferencia".
            func1(array6);
        }


        static void func1(double[] arr)
        {
            double temp1 = 0;
            double temp2 = 0;

            for (int i = 0; i < arr.Length - 1; i++)
            {
                temp1 = arr[i];
                temp2 = arr[i++];

                Console.WriteLine($"Contienes: {arr[i]}");
            }
        }

{} 是设置符号。集不包含重复项。请改用 [] 括号。

由于 temp2 = arr[i++] 将计数器 i 增加 1 而无需打印它,因此您将始终仅每隔一个打印一次。

顺便说一句

temp2= arr[i++] ;

仍然具有与 arr[i] 相同的值;

如果要将下一个值分配给 temp2,则必须使用

temp2 = arr[++i];

所以试试这个

    var i=0;
    for ( i =0; i < arr.Length-1; )
    {
        temp1 = arr[i];
        temp2 = arr[++i];
        
        Console.WriteLine($"Contienes: {arr[i-1]}");
    }
    Console.WriteLine($"Contienes: {arr[i]}");

问题出在你的 for 循环中。您有 i = 0 并且还声明 i 应该小于 arr.Length - 1。最后会留下一个值。

试试这个:

for(var i = 0; i < arr.Length; i++)

您还为每个循环递增 i 两次。一次进入循环,一次进入 temp2 = arr[i++] 行。为此,您必须删除最后一行,因为您将在最后一次迭代中得到 IndexOutOfRangeException:

temp2 = arr[i++];

如果出于某种原因需要在每次迭代中写入这两个值,请将其删除或将 for 循环条件调整为 i < arr.Length - 1