1
個人的なプロジェクトの一環として、正方形の格子(整数点の2乗)を生成する必要があります。ここでJavaで直立正方格子を生成する
コードです:
論理的private ArrayList<Point> generateSquare(int area, Point center) {
int length = (int) Math.rint(Math.sqrt(area));
Point startingPoint = new Point((int) Math.rint(center.getX() - (length/2)), (int) Math.rint(center.getY() - (length/2))); // get bottom left corner
ArrayList<Point> squarePoints = new ArrayList<>();
for (int i = 0; i <= length - 1; i++) { // iterate for the length of the square
squarePoints.add(new Point(startingPoint.x + i, startingPoint.y));
}
for (int i = 0; i <= length - 2; i++) { // iterate for the length of the square minus one since I already have the first row. 2 is subtracted to to account for index 0. This iterates for each row.
for (int j = 0; j <= length - 1; j++) { // iterates for the points in each row. Index 0 is needed, so length is minus one.
Point tempPoint = squarePoints.get(i); // gets the point to manipulate
squarePoints.add(new Point(tempPoint.x, startingPoint.y + j));
}
}
return squarePoints;
}
、これは私がしようとしているものです:
- 私が生成される格子の中心点を与えています。 から、私は左下隅を見つけることができます。これは startingPointとして格納されます。
- 次に、正方形の長さについて を繰り返し、squarePointsと呼ばれるArrayList に新しいポイントを追加することによって、正方形のポイントの一番下の行を生成します。
- 次に、最初の行が既にあるので、 があるため、1の長さから1を引いて繰り返します。
- このforループの中で、私は再び正方形の長さを繰り返します。 ここでは、現在の反復の値のインデックスにあるsquarePoints ArrayListからのポイントであるtempPointを取得します。 これを行う理由は、 元の行からポイントを操作しているためです。次に、同じx 座標を持つ新しいポイントをtempPointとして追加し、y座標に startingPointプラス現在の繰り返しを加えます。
このプロセスの目的は、正方形の残りの行をすべて追加することです。
現在のところ、私が実行すると、不正なポイント数が返されます。他の誰かが私のコードで問題を特定し、より良い解決策を提供できることを期待しています。
また、これはコンソールアプリケーションであるため、AWTのPointクラスを使用することは悪い習慣ですか?
何か助けていただければ幸いです。
ありがとうございました。
予想される結果は何ですか?正方形の領域内のすべての整数点?または周辺の点だけ? – c0der