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();
}
}
}
如果你有一个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
将导致问题,如本答案所述。