簡體   English   中英

遍歷2D數組; 魔術廣場

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM