1D数组中的一些值没有显示

本文关键字:显示 数组 1D | 更新日期: 2023-09-27 18:18:43

我正在编写一个c#程序,该程序必须将随机的10*12 2D数组的元素复制到1D数组上。一切似乎都很正常。但是,2D数组中的一些元素(最后18个)不能复制到1D数组中。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace James_Archbold_A1
{
    class Program
    {
        static void Main(string[] args)
        {
            int row = 10;
            int column = 12;
            int[,] twoDArray = new int[row, column];  
            int[] oneDArray = new int[row*column];
            FillTwoDimArray(twoDArray);
            DisplayTwoDimArray(twoDArray);
            StoreValues(twoDArray, oneDArray);
            DisplayOneDimArray(oneDArray);
            Console.ReadLine();
        }
        static void FillTwoDimArray(int[,] table)
        {
            int min = 0;
            int max = 100;
            int rndNumber;
            Random rnd = new Random();
            for (int row = 0; row < table.GetLength(0); row++) //use GetLength(0) to get the size of the row
            {
                for (int col = 0; col < table.GetLength(1); col++)  //use GetLength(1) to get the size of the column
                {
                    rndNumber = rnd.Next(min,max);
                    table[row, col] = rndNumber;
                }
            }
        }
        static void DisplayTwoDimArray(int[,] table)
        {
            for (int row = 0; row < table.GetLength(0); row++)
            {
                for (int col = 0; col < table.GetLength(1); col++)
                {
                    Console.Write("{0}'t", table[row, col]);
                }
            }
            Console.WriteLine();
        }
        static void StoreValues(int[,] twoDArray, int[] oneDArray)
        {
            int rowSize = twoDArray.GetLength(0);
            int colSize = twoDArray.GetLength(1);
            for (int row = 0; row < rowSize; row++)
            {
                for (int col = 0; col < colSize; col++)
                {
                    int element;
                    element = twoDArray[row, col];
                    oneDArray[row * rowSize + col] = element;
                }
            }
        }
        static void DisplayOneDimArray(int[] oneDArray)
        {
            for (int i = 0; i < oneDArray.GetLength(0); i++ )
            {
                Console.Write("{0}'t", oneDArray[i] );
            }
            Console.WriteLine();
        }


    }
}

1D数组中的一些值没有显示

如果你有一个2x5的数组,你的rowSize是2,你的colSize是5。然后你的循环设置一个值到数组在[row * rowSize + col]。它的前几个值将是:

0*2+0 = 0
0*2+1 = 1
0*2+2 = 2
0*2+3 = 3
0*2+4 = 4
1*2+0 = 2
1*2+1 = 3
1*2+2 = 4
1*2+3 = 5

所以你在循环相同的值,设置它们多次,也不设置数组中的最后一个值。如果你有更多的行比列,我想你会得到一个越界异常?

如果您将row * rowSize + col更改为正确的映射row * colSize + col,它应该工作

尝试将以下代码复制到1D:

void StoreValues(int[,] twoDArray, int[] oneDArray)
{
  int rowSize = twoDArray.GetLength(0);
  int colSize = twoDArray.GetLength(1);
  var total=rowSize*colSize;//TOTAL ITEMS IN 1D ARRAY
  for (int row = 0, d=0; row < rowSize; row++)
  {
      for (int col = 0; col < colSize; col++)
      {
          //STORE AT POSITION d
          oneDArray[d++] = twoDArray[row, col];
      }
  }
}

使用row * rowSize + col将导致问题,如本答案所述。