我有一个“连接四板”,我用二维数组模拟(数组[x] [y] x = x坐标,y = y坐标)。我必须使用“System.out.println”,所以我必须遍历行。
我需要一种方法来迭代这种方式[0,0] [1,0] [2,0] [3,0] [0,1] [1,1] [2,1]等
如果我使用正常程序:
for (int i = 0; i<array.length; i++){
for (int j = 0; j<array[i].length; j++){
string += array[i][j];
} System.out.println(string)
}
它不起作用,因为它以这种方式迭代[0,0] [0,1] [0,2] [0,3]等
正常程序保持在x并且递增y直到列的结尾,但我需要在y中说并递增x直到行的结尾。
答案 0 :(得分:22)
将它视为一个数组数组,这肯定会起作用。
int mat[][] = { {10, 20, 30, 40, 50, 60, 70, 80, 90},
{15, 25, 35, 45},
{27, 29, 37, 48},
{32, 33, 39, 50, 51, 89},
};
for(int i=0; i<mat.length; i++) {
for(int j=0; j<mat[i].length; j++) {
System.out.println("Values at arr["+i+"]["+j+"] is "+mat[i][j]);
}
}
答案 1 :(得分:9)
只需将索引的顺序颠倒过来:
for (int j = 0; j<array[0].length; j++){
for (int i = 0; i<array.length; i++){
因为所有行都有相同数量的列,所以你可以使用这个条件j&lt;数组[0]。由于你在矩阵上迭代而导致条件首先变为
答案 2 :(得分:4)
//This is The easiest I can Imagine .
// You need to just change the order of Columns and rows , Yours is printing columns X rows and the solution is printing them rows X columns
for(int rows=0;rows<array.length;rows++){
for(int columns=0;columns <array[rows].length;columns++){
System.out.print(array[rows][columns] + "\t" );}
System.out.println();}
答案 3 :(得分:2)
只需更改索引即可。我和j ....在循环中,如果你正在处理字符串,你必须使用concat并将变量初始化为空强,否则你会得到一个例外。
String string="";
for (int i = 0; i<array.length; i++){
for (int j = 0; j<array[i].length; j++){
string = string.concat(array[j][i]);
}
}
System.out.println(string)
答案 4 :(得分:1)
这些功能应该可以工作。
// First, cache your array dimensions so you don't have to
// access them during each iteration of your for loops.
int rowLength = array.length, // array width (# of columns)
colLength = array[0].length; // array height (# of rows)
// This is your function:
// Prints array elements row by row
var rowString = "";
for(int x = 0; x < rowLength; x++){ // x is the column's index
for(int y = 0; y < colLength; y++){ // y is the row's index
rowString += array[x][y];
} System.out.println(rowString)
}
// This is the one you want:
// Prints array elements column by column
var colString = "";
for(int y = 0; y < colLength; y++){ // y is the row's index
for(int x = 0; x < rowLength; x++){ // x is the column's index
colString += array[x][y];
} System.out.println(colString)
}
在第一个块中,内部循环在移动到下一列之前迭代行中的每个项目。
在第二个块(您想要的块)中,内部循环在移动到下一行之前迭代所有列。
tl;dr:
本质上,两个函数中的 for()
循环被切换了。就是这样。
我希望这有助于您理解迭代二维数组背后的逻辑。
此外,无论您有 string[,] 还是 string[][]
答案 5 :(得分:0)
简单的想法:获取最长行的长度,迭代每列打印行的内容(如果有行)。下面的代码可能会有一些一对一的错误,因为它是在一个简单的文本编辑器中编码的。
int longestRow = 0;
for (int i = 0; i < array.length; i++) {
if (array[i].length > longestRow) {
longestRow = array[i].length;
}
}
for (int j = 0; j < longestRow; j++) {
for (int i = 0; i < array.length; i++) {
if(array[i].length > j) {
System.out.println(array[i][j]);
}
}
}