我试图像这样对角地循环一个(布尔)2D数组:/
(不像这个\
,因为我已经知道如何做)以及下面的单元格。该方法的目的是通过并将对角线上方和下方的所有单元格(按行 - 主顺序)设置为true。因此,它将从左上角开始,从那里开始向下工作,并且不必触及右下方。
我有沿着对角线走的代码,它只是下面的部分我遇到了困难。这是对角线的代码:
for (int r = 0; r < min; r++)
{
colorArray[r][min-r-1+difference] = true;
gui.update(colorArray);
}
这是我的一些代码,用于对角和下面的单元格。:
for (int r = 0; r < min; r++)
{
colorArray[r][min-r-1+difference] = true;
for (int i = r; i < rowLength; i++)
{
colorArray[i][r] = true;
gui.update(colorArray);
}
}
它输出: https://imgur.com/AXBna8F
输出我看起来应该更像这样: https://imgur.com/okrvFK2
这是我在这里的第一篇帖子,所以如果我的问题需要进一步澄清和编辑,请告诉我。
答案 0 :(得分:0)
我的假设是(0,0)是左上角。所以你想从右上角(最大,0)开始,向左斜下方做?
试试这个:
// top right corner
int x = colorArray.length - 1;
int y = 0;
while(x >= 0){
int colHeight = colorArray[x].length;
for (int i = y; i < colHeight; i++){
colorArray[x][i] = true;
gui.update(colorArray);
}
x--;
y++;
}
答案 1 :(得分:0)
这是我做的:
package com.company;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
boolean[][] arr = new boolean[4][4];
// we go from main diagonal and set each element on it to true as well as each element after it
for (int i = 0, j = arr.length - 1; i < arr.length; i++, j--) {
for (int k = j; k < arr[i].length; k++) {
arr[i][k] = true;
}
}
// print out result of changing main diagonal and elements below to true
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.printf("%5b ", arr[i][j]);
}
System.out.println();
}
}
}
第一个循环对你来说很重要,坐下来试图弄清楚会发生什么。
输出:
false false false true
false false true true
false true true true
true true true true
答案 2 :(得分:0)
r
遍历行索引。
i
遍历列索引。
随着行索引的增加,列索引应该会下降。
因为,
当你走下去时,你想要绘制更宽更宽的部分。
与r + 1
一样宽。
我认为如果列索引从0到r
,并且从右到左绘制单元格,逻辑将更容易理解。
int min = Math.min(colorArray.length, colorArray[0].length);
for (int r = 0; r < min; r++) {
char[] row = colorArray[r + Math.max(0, colorArray.length - min)];
for (int i = 0; i <= r; i++) {
row[row.length - 1 - i] = true;
gui.update(colorArray);
}
}