我目前有一個關于為我的2D陣列填充0的問題。我想把我的陣列中的當前資料轉移到一個新的陣列中,這個陣列是完全相同的,但周圍有一個0的邊界。 例如:
|1 2 3|
|4 5 6|
|7 8 9|
應該變成
|0 0 0 0|
|0 0 0 0|
|0 1 2 3 0|
|0 1 2 3 0|
|0 4 5 6 0|
|0 4 5 6 0|
|0 7 8 9 0|
|0 7 8 9 0|
|0 0 0 0|
|0 0 0 0|
int[ 。 ] Array = new int[, ] { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 }. };
int[,] ArrayZeroPad = new int[Array. GetLength(0) 2, Array.GetLength(1) 2] 。
for (int y =0; y < Array.GetLength(1); y )
{
for (int x = 0; x < ArrayZeroPad.GetLength(0); x )
{
if (y == 0)
{ ArrayZeroPad[y, x] = 0; }
else if (y == ArrayZeroPad.GetLength(1)
{ ArrayZeroPad[y, x] = 0; }
else if (x == 0)
{
ArrayZeroPad[y, x] = 0;
}
else if (x == ArrayZeroPad.GetLength(0)
{ ArrayZeroPad[y, x] = 0; }
else ArrayZeroPad[y, x] = Array[y, x];
}
}
for (int y = 0; y < ArrayZeroPad.GetLength(1); y )
{
Console.WriteLine()。
for (int x = 0; x < ArrayZeroPad.GetLength(0); x )
{ Console.Write(ArrayZeroPad[y, x]); }
Console.ReadLine()。
}
}
這是我迄今為止得出的結論,但我一直被界外錯誤卡住,有沒有人可以為我解決這個問題,并提供一些解釋?
親切的問候。 D.
uj5u.com熱心網友回復:
int[ , ] Array = new int[, ] { { 1, 2, 3 }, { 3, 4, 5 }, { 6, 7, 8 }. };
int[,] ArrayZeroPad = new int[Array. GetLength(0) 2, Array.GetLength(1) 2] 。
for (int x =0; x < ArrayZeroPad.GetLength(0); x )
{
for (int y = 0; y < ArrayZeroPad.GetLength(0); y )
{
//第一行和最后一行。
if (x == 0 || x == ArrayZeroPad.GetLength(0) - 1)
ArrayZeroPad[x, y] = 0;
else[/span
{
//Fist column and last column; else {
if (y == 0 || y == ArrayZeroPad.GetLength(0) - 1)
ArrayZeroPad[x, y] = 0;
else[/span
{
//Content else {
ArrayZeroPad[x, y] = Array[x-1, y-1] 。
}
}
}
}
uj5u.com熱心網友回復:
看來你混淆了尺寸--Array.GetLength(0)是針對訪問Array[i, j]中的第一個,而Array.GetLength(1)是針對第二個。另外,你可以通過掃描Array元素和調整目標索引來簡化復制,你不需要明確地將其他元素設定為0,因為它將為你完成(除非你使用stackalloc和跳過本地init,但我非常懷疑這是一種情況):
var length0 = Array.GetLength(0)。
var length1 = Array.GetLength(1)。
for (int i = 0; i < length0; i )
{
for (int j = 0; j < length1; j )
{
ArrayZeroPad[i 1, j 1] = Array[i, j]。
}
}
而且在 "列印 "方法中--y應該是第一維,x--第二維:
var length = ArrayZeroPad.GetLength(0)。
for (int y = 0; y < length; y )
{
Console.WriteLine()。
var i = ArrayZeroPad.GetLength(1)。
for (int x = 0; x < i; x )
{
Console.Write(ArrayZeroPad[y, x])。
}
Console.ReadLine()。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/334239.html
標籤:
