【问题标题】:How to fill rectangles depending on an item in an array?如何根据数组中的项目填充矩形?
【发布时间】:2026-01-12 06:55:02
【问题描述】:

所以基本上,我需要生成一个由 1 和 0 组成的数组,然后填充一定数量的矩形。矩形是“正方形”,需要形成更大的正方形。说,我希望我的大方块宽和高为 500 像素,并用 100 个方块填充,所以我需要一个长度为 10 的 10 个数组 - 我部分成功了 - 然后我需要填充小方块,具体取决于生成的数组的索引,例如,如果数组 1-1 为 1,则应填充正方形 1-1,依此类推。

public void run() {
    int tableSize = readInt("Enter the size of the table in pixels: ");
    int squareNumber = readInt("Enter the number of squares in a row: ");
    filler(arrayGen(squareNumber), tableSize, squareNumber);
    }

private double[] arrayGen(int A) {
    double[] arr1 = new double[A];
    for (int i = 0; i < arr1.length; i++) {
        arr1[i] = (Math.random() < 0.5 ? 0 : 1);
    }
    return arr1;
}

private void filler(double[] A, int x, int y) {
    for (int i = 0; i < A.length; i++){
        for (int x1 = 0; x1 < x; x1+=(x/y)) {
            GRect rect1 = new GRect (x1, 0, x/y, x/y);
            rect1.setFilled(true);
            rect1.setFillColor(Color.blue);
            if (A[i] == 1) {
                add(rect1);
            }
         }
      }
   }
}

这就是我想出的,它仍然缺少一些部分,即如何生成以下行,但就像我上面所说的,我的主要问题是数组。

谢谢!

【问题讨论】:

  • 阵列的主要问题是什么?我真的说不出来。如果它/它们似乎是不必要的,我可以说这一代,所以也许抛弃这个想法。另外,如果您不确定是否会添加 GRect,我不会花费资源来实例化 GRect。检查是否应该先;然后创建它,然后添加它。
  • 数组的问题在于,在filler中,程序只读取数组中的第一项,并决定将要添加的所有矩形都被填充/空
  • 那么所有添加但只有数组值为1的矩形被填充?
  • 是的,完全正确。我不知道该怎么做
  • 我回答了,但删除了。我认为查看 Eran 的答案可以让您上路。我的答案中的代码使您到达了正确填充 single 行矩形的位置,但是您希望拥有多个数组,因此第二次添加它会使我的代码过时。

标签: java arrays graphics generator


【解决方案1】:

您的代码在 A[i] 和第 i 个正方形之间没有关系。 filler 运行外循环A.length 次,在内循环中创建的矩形都使用相同的A[i] 值来确定是否应该填充,所以它们是全部填充还是全部为空取决于最后一个值在A 数组中。

看起来您的 filler 方法只为大正方形的第一行创建矩形。

【讨论】:

  • 我解决了数组值的问题,现在我只需要让它重复与列一样多的行^^