Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图理解多维数组_Java_Arrays_Nested Loops - Fatal编程技术网

Java 试图理解多维数组

Java 试图理解多维数组,java,arrays,nested-loops,Java,Arrays,Nested Loops,我正在努力成为一名更好的程序员,但我还是很新手。我拼命地想更好地理解多维数组。这是我已经参加过的一个测验中的一个问题,但我正在努力练习以提高成绩。这就是我被难倒的地方 下面显示了类Cipher.java对加密方法的修改。使用明文 “123456789987654321”和关键字“NEIUP2” 所以,这基本上是一个“把这些数字放到表中”的问题 下面是一段我一直关注的文字片段: // change columns according to shuffle keyword for (i=6;

我正在努力成为一名更好的程序员,但我还是很新手。我拼命地想更好地理解多维数组。这是我已经参加过的一个测验中的一个问题,但我正在努力练习以提高成绩。这就是我被难倒的地方

下面显示了类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]); 
     } 
 } 
所以for循环的第一行是

newTable.setLetter(0,5,Table[0][2]);
那么这到底是做什么的呢?如果我用简单的语言来看,代码会说

将数组的内容放在0,5,并将它们放在表的0,2位置。我的逻辑正确吗

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


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

假设你有
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++) {
     }
}
x
将等于
4
,因为您向下移动
3
(从0开始)和
4
accross(从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]
    }
}
比如,我说,我可能没有回答你的问题。但我想指出的一点是,如果你要玩弄索引,你很有可能会收到一条错误消息,称为
例外
。有许多不同类型的
例外
。在你玩弄索引的情况下在循环中,有很好的机会获取和
ArrayIndexOutOfBoudsException
。这正是它的外观。这意味着,您正在尝试访问
索引
,该索引超出了
[5][6]
范围

例如,如果在循环中有这样的内容

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];
    }
}
    newTable[i + 1][j] = table[i][j];
循环在它的最后一次迭代中,即
i=4
j=5',您将得到一个
ArrayIndexOutofBoundsSeption
,因为您正在尝试访问不存在的
newTable[5][5]

至于你的问题

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

在没有看到更多代码的情况下,我不知道该检查什么。但是如果
setLetter()正确实现了
.setLetter()
,那么您的逻辑听起来是正确的
甚至存在。

newTable是一个新的多维数组。完整的算法将一个表的内容应用到另一个表中,有点像copyAn会让你得到更多的关注和更好的答案。如果
newTable
是一个数组,它就不能有
setLetter
方法。我假设你已经完成了基本内容什么是SSCCE?不,我没有看到那个资源!我来看看。set.Letter是一个真正的方法。这里是:public void setLetter(int indexI,int indexJ,char Letter){Table[indexI][indexJ]=Letter;}谢谢!这确实帮了我很大的忙。我想复杂的嵌套循环真的让我很头疼。这是老师的回复。我想这就是答案,我仍然不确定如何从循环newTable.setLetter(0,5,表[0][2])中找到答案;是i=6和j=5时的有效值。它取表[0][2]中的值,并将该值赋给新表[0][5]
    newTable[i + 1][j] = table[i][j];
newTable.setLetter(0,5,Table[0][2]);