2013-10-30 25 views
0

我想成爲一個更好的程序員,但我仍然很綠。我正拼命想更好地理解多維數組。這是我已經參加的測驗中的一個問題,但我正試圖讓它變得更好。這是我難倒的地方。試圖瞭解多維數組

對類Cipher.java中加密方法的修改如下所示。使用明文 「123456789987654321」和關鍵字「NEIUP2

所以,它基本上是一個'把這些數字放在一個表'的問題。

這裏的文字片段上我堅持:

// change columns according to shuffle keyword 
for (i=6; i>0 ;i=i-1) 
{ 
    for (j=0; j<5 ;j=j+1) 
    { 
     newTable.setLetter(j, i-1, Table[j][5-i+1]); 
    } 
} 

鑑於inital輸入 我6 Ĵ0

對於第一輸出我得到這個 J = 0 i-1 = 5

**Table [j][5-6+1] = Table[0][2]** 

因此,對於f for循環的第一行將是

newTable.setLetter(0,5,Table[0][2]); 

那麼這實際上是幹什麼的?如果我用通俗易懂的語言看這段代碼,代碼會說:

將Array的內容放在0,5處,並將它們放在表的位置0,2處。我的邏輯正確嗎?

數組和嵌套循環對我來說很難理解。

P.s.我知道這對某些人來說可能是初級的。我也知道可能有更好的方法或可用的類。我真的在尋找基本的理解。走路才能爬行嗎?

+0

什麼是新表? – Taylor

+0

newTable是一個新的多維數組。完整的算法將一個表格的內容應用到另一個表格,並將其應用到另一個表格中,類似於副本 –

+0

[SSCCE](http://sscce.org)將爲您提供更多的關注和更好的答案。 –

回答

0

假設有newTable[5][6],2D陣列

int[][] newTable = {{1, 2, 3, 4, 5}, 
        {6, 7, 8, 9, 8}, 
        {7, 6, 5, 4, 3}, 
        {2, 1, 2, 3, 4}, 
        {5, 6, 7, 8, 9}, 
        {8, 7, 6, 5, 4}}; 

當循環通過它們

for (int i = 0; i < 5; i++) { 
    for (int j = 0; j < 6; j++) { 
    } 
} 

在外環的5導致循環運行5次。對於這些迭代中的每一個,都存在比運行6次更多的循環,總計5 * 6(30)

ij如果您想使用循環中的索引,則ij表示索引。

//例如 newTable [i] [j] = 1; //我和j是第一次迭代,所以我= 0和j = 0

如果你看看我的矩陣上面,你會看到左上角,你會看到值1newTable[i][j] = 1;中的i代表"rows"j代表"column"rows在這種情況下實際上是下降和columns去橫跨。

所以,如果你說

inx x = newTable[3][4]; 

x就等於4,因爲你去3下降(從0開始)和4翻過(從0 atarting)

讓我們回到循環。我可能不會回答你的問題,但我想給你一些見解。

for (int i = 0; i < 5; i++) { 
    for (int j = 0; j < 6; j++) { 
     // say you have another table "table" 
     table[i][j] = newTable[i][j] 
    } 
} 

以上所做的全部工作都是將值爲table[i][j] = newTable[i][j]。如果你想交換他們,你可以這樣做

for (int i = 0; i < 5; i++) { 
    for (int j = 0; j < 6; j++) { 
     int temp = newTable[i][j]; 
     table[i][j] = newTable[i][j]; 
     newTable[i][j] = table[i][j]; 
    } 
} 

我喜歡,我說,我可能不會回答你的問題。但我想指出的一件事是,你是玩弄指數,你很有可能得到一個錯誤消息,稱爲Excpetion。有很多不同種類的Exceptions。在循環播放指數的情況下,很有可能獲得和ArrayIndexOutOfBoudsException。它正是它的樣子。這意味着,您試圖訪問[5][6]範圍以外的index

例如,如果在你的循環,你有這樣的事情

newTable[i + 1][j] = table[i][j]; 

和循環是在它的最後一次迭代,這是i = 4j = 5', you would get an ArrayIndexOutOfBoundsExeption because you're trying access newtable的[5] [5]`這不存在。

至於你的問題,關於這個

newTable.setLetter(0,5,Table[0][2]); 

我不知道該怎麼赫克,做,沒有看到更多的代碼。但是你的邏輯聽起來是正確的,因爲​​正確實施,如果setLetter()甚至存在。

+0

set.Letter是一個真正的方法。這裏是: public void setLetter(int indexI,int indexJ,char letter) {[indexI] [indexJ] = letter; } –

+0

謝謝!這實際上幫了很大忙。我想複雜的,嵌套的循環是真正的我用我的知識殺了我。 –

+0

這是老師的迴應。我想這是答案,仍然不知道我怎麼能從循環 newTable.setLetter(0,5,表[0] [2]); 是當i = 6和j = 5時的有效值 它取得表[0] [2]中找到的值並將該值分配給NewTable [0] [5] –