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