[英]Iterating through a 2D array; magic square
對於我的夏季Java課,我正在開發一個程序,該程序可檢測數組中的元素是否為幻方。 我不完全確定如何正確地遍歷數組,以便能夠計算出單獨的列和行的總數,以確定數組是否是一個魔術方塊。 我們得到了向下對角線總和的代碼,但是我不確定如何逼近向上對角線,行和列。 到目前為止,這是我的代碼片段。
public class MagicSqaure
{
public static void main(String[] args)
{
int[][] array =
{
{2, 7, 6},
{9, 5, 1},
{4, 3, 8}
};
public static int getSumOfDownDiagonal(int[][] array)
{
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[i][i];
}
return total;
}
由於這是一個類,因此我只能提供有關如何完成行,列和對角線遍歷的幫助,但是“根本不提供代碼”。 正確的實現取決於您,否則您不是在學習而是在復制/粘貼/成為僵屍編碼器。
要遍歷每一行,請像這樣遍歷數組的元素:
total += array[i][j];
i
不會改變但j
改變的地方。
要遍歷每一列,請像下面這樣遍歷數組的元素:
total += array[i][j];
i
在哪里改變,但j
不會改變。
要遍歷對角線,請像這樣遍歷數組的元素:
total += array[i][j];
其中i
從數組數組的最后一個索引開始,而j
從數組數組的第一個索引開始。
每當我需要為某些行為導出方程式時,我只需手動寫出一些答案,然后尋找模式。 首先讓我們假設這是我們訪問數組中項目的方式:
column
0 1 2
--------
0 | 2 7 6
row 1 | 9 5 1
2 | 4 3 8
(Using array[column][row])
現在,讓我們獲取列的索引:
column 0 = {2, 9, 4} = array[0][0], array[0][1], array[0][2]
column 1 = {7, 5, 3} = array[1][0], array[1][1], array[1][2]
以下是這些行:
row 0 = {2, 7, 6} = array[0][0], array[1][0], array[2][0]
row 1 = {9, 5, 1} = array[0][1], array[1][1], array[2][1]
這是另一個對角線:
3x3 array = {4, 5, 6} = array[0][2], array[1][1], array[2][0]
4x4 array = array[0][3], array[1][2], array[2][1], array[3][0]
注意到任何模式嗎? 對於對角線,我們從array [0] [array.length-1]開始,到array [array.length-1] [0]結束。 這意味着我們的循環如下:
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[i][array.length - 1 - i];
}
return total;
總而言之,它將是:
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[column_index][i];
}
return total;
對於行:
int total = 0;
for (int i = 0; i < array.length; i++)
{
total += array[i][row_index];
}
return total;
編輯:為了回應不贊成票和提出的評論,我修改了魔方代碼以使用行主要約定。 哦,等等,不,我沒有,因為代碼是相同的。 無論如何,這就是您的做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.