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]); 
     } 
 } 

给定初始输入 I 6 J 0

对于第一个输出,我得到了这个 J=0 i-1=5

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

所以对于 for 循环的第一行将是

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

那么这实际上是做什么的呢?如果我用简单的语言看这个代码会说,

将 Array 的 0,5 处的内容放在表格的 0,2 位置。我的逻辑正确吗?

数组和嵌套循环对我来说有点难以理解。

Ps 我知道这对你们中的一些人来说可能是基本的。我也知道可能有更好的方法或可用的课程。我真的在寻找基本的理解。必须先走路才能爬行,对吗?

4

1 回答 1

0

假设你有newTable[5][6]一个二维数组

 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外循环中的 in 导致循环运行 5 次。对于这些迭代中的每一个,除了运行6时间之外,还有另一个循环,总共为5 * 6times (30)

ij如果您想在循环中使用索引,i并表示j索引。

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

如果你看我上面的矩阵,你会看到左上角,你会看到 value 1iinnewTable[i][j] = 1;代表"rows"j代表"column"。 _ rows在这种情况下,实际上下去并columns穿过。

所以如果你说

inx x = newTable[3][4];

x将相等4,因为您3向下(从 0 开始)并4越过(从 0 开始)

让我们回到循环。我可能不会回答你的问题,但我想给你一些见解。

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。如果您在循环中使用索引,则很有可能获得 and ArrayIndexOutOfBoudsException。它正是它的样子。这意味着,您正在尝试访问index超出[5][6]范围的内容。

例如,如果在你的循环中你有这样的东西

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

并且循环在它的最后一次迭代中,即不存在的 ArrayIndexOutOfBoundsExeption newTable[5][5] i = 4` j = 5', you would get anbecause you're trying access

至于你关于这个的问题

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

我不知道该怎么做,没有看到更多的代码。但是你的逻辑听起来是对的,如果它.setLetter()是正确实现的,如果 asetLetter()甚至存在的话。

于 2013-10-30T03:30:17.817 回答