大批 :
int[,] nums = new int[3,4]{
{6,7,9,8},
{4,2,1,3},
{9,7,0,4}
};
我需要反向列印行但保持列的順序相同。
瀏覽了整個互聯網,我什至不知道從哪里開始我的代碼,我所擁有的只是一個反向列印的 for 回圈,但是當我運行我的代碼時,什么都沒有顯示。
for (row = 3; row >= 0; row--)
{
for (column = 0; column < 4; column )
{
Console.Write("{0} ",nums[row,column]);
}
}
我肯定遺漏了一些東西,我得到的唯一錯誤是索引越界。
uj5u.com熱心網友回復:
請不要使用像,之類的幻數,而是使用實際陣列長度 , :34GetLength(...)
int[,] nums = new int[3, 4] {
{ 6, 7, 9, 8 },
{ 4, 2, 1, 3 },
{ 9, 7, 0, 4 },
};
for (int row = nums.GetLength(0) - 1; row >= 0; --row) {
for (int column = 0; column < nums.GetLength(1); column)
Console.Write($"{nums[row, column]} ");
if (row > 0)
Console.WriteLine();
}
小提琴
uj5u.com熱心網友回復:
如您所知,陣列中的索引從 0 到上限,因此在回圈遍歷時,您應該考慮對于具有 3 個元素的陣列,您將擁有索引 0、1 和 2,而您正在嘗試訪問不存在的索引 3。
高級語言有避免這種情況的保護措施,這里會拋出一個超出范圍的型別例外,讓您知道您正在訪問不屬于陣列的記憶體。
您應該避免直接索引,因為很容易出現這些錯誤,您應該始終嘗試使用基于范圍的回圈,如果無法通過代碼獲取陣列的長度,請不要使用硬編碼維度,除非你必須。在這里,您可以使用成員方法來確定陣列的邊界:
int[,] nums = {
{6,7,9,8},
{4,2,1,3},
{9,7,0,4}
};
for (var row = nums.GetUpperBound(0); row >= 0; row--)
{
for (var column = 0; column < nums.GetLength(1); column )
{
Console.Write("{0} ",nums[row,column]);
}
Console.WriteLine(); // line break for tiddy print
}
uj5u.com熱心網友回復:
這應該作業
for (row = 2; row >= 0; row--)
{
for (column = 0; column < 4; column )
{
Console.Write("{0} ",nums[row,column]);
}
}
uj5u.com熱心網友回復:
for ( row = 3 ; row >= 0; row--)
程式拋出 OutOfRangeEception,因為當你有一個陣列 [3,4] 時,行的最后一個索引是 2。你的程式試圖找到一個索引號太大的元素(3)。在這里你有作業代碼
int[,] nums = new int[3, 4] { { 6, 7, 9, 8 }, { 4, 2, 1, 3 }, { 9, 7, 0, 4 } };
for (int **row = 2**; row >= 0; row--)
{
for (int column = 0; column < 4; column )
{
Console.Write("{0} ", nums[row,column]);
}
Console.WriteLine();
}
如您所見,將 for 回圈中的值從 3 更改為 2 解決了問題。我的一個重要說明 - 嘗試在內部宣告計數器變數- 如果不需要,請不要將其設為“全域” 。在更大的專案中,它可能會使用比必要更多的記憶體。當它在for內部時,垃圾收集器將在所有回圈后銷毀該變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/461262.html
上一篇:R中的for回圈分離函式
下一篇:從二維陣列中動態獲取列
