相互に再帰的な 2 つのメソッドを持つプログラムを使用し、そのプログラムを修正して、単一の再帰的なメソッドを含める必要があります。私が理解していることから、再帰呼び出しを呼び出された順序で単一のメソッドに配置することにより、2 つの再帰メソッドを組み合わせる必要があります。問題は、メソッドを介して渡される 4 つの整数があり、最初のメソッドが 2 番目のメソッドを 2 回呼び出し、2 番目のメソッドが最初のメソッドを 2 回呼び出すことです。
これは元のコードです:
public void drawHorizontal(Graphics graphics, double xMid, double yMid, double length )
{
// find left endpoint
double x1 = xMid - (length / 2);
double y1 = yMid;
// find right endpoint
double x2 = xMid + (length / 2);
double y2 = yMid;
if (length > 5)
{
// draw a line from (x1,y1) to (x2,y2)
graphics.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
// draw a vertical line with left end of horizontal as midpoint of new line
drawVertical(graphics, x1, y1, (length) );
// draw a vertical line with right endof horizontal as midpoint of new line
drawVertical(graphics, x2, y2, (length) );
}
} // end drawHorizontal()
public void drawVertical(Graphics graphics, double xMid, double yMid, double length )
{
// find upper endpoint
double x1 = xMid;
double y1 = yMid - (length / 2);
// right lower endpoint
double x2 = xMid;
double y2 = yMid + (length / 2);
if (length > 5)
{
// draw a line from (x1,y1) to (x2,y2)
graphics.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
// draw a 1/2 size horizontal line with top end of vertical as midpoint of new line
drawHorizontal(graphics, x1, y1, (length/2) );
// draw a 1/2 horizontal line with bottom end of vertical as midpoint of new line
drawHorizontal(graphics, x2, y2, (length/2) );
}
} // end drawVertical()
以下は、私の最新の変更されたコードです。醜いことはわかっていますが、x座標とy座標を互いに独立して調整する方法がわかりません。より多くの変数を作成してこれを修正しようとしましたが、より多くの作業を行っているだけだと感じずにはいられません。私が見つけた最も近いスタックの質問はthisでした。11時からやっていて、今4時15分です。正しい方向への微調整は大歓迎です。お時間をいただきありがとうございます。
編集 * 迅速な返信ありがとうございます。相互に再帰的なメソッドをこのように分割するのは直観に反するように思えますが、プログラミングと Java は初めてなので、問題を分割するさまざまな方法を模索しています。これは私が最終的に分解したもので、問題なく動作します。お時間をいただきありがとうございます。
変更されたコード:
public void Total(Graphics graphics, boolean type, double xMid, double yMid, double length) {
double x1;
double y1;
// find right endpoint
double x2;
double y2;
if (type == false) {
// find left endpoint
x1 = xMid - (length / 2);
y1 = yMid;
// find right endpoint
x2 = xMid + (length / 2);
y2 = yMid;
if (length > 5) {
// draw a line from (x1,y1) to (x2,y2)
graphics.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
// draw a vertical line with left end of horizontal as midpoint of new line
Total(graphics, true, x1, y1, (length));
// draw a vertical line with right endof horizontal as midpoint of new line
Total(graphics, true, x2, y2, (length));
}
} else {
// find upper endpoint
x1 = xMid;
y1 = yMid - (length / 2);
// right lower endpoint
x2 = xMid;
y2 = yMid + (length / 2);
if (length > 5) {
// draw a line from (x1,y1) to (x2,y2)
graphics.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
// draw a 1/2 size horizontal line with top end of vertical as midpoint of new line
Total(graphics, false, x1, y1, (length / 2));
// draw a 1/2 horizontal line with bottom end of vertical as midpoint of new line
Total(graphics, false, x2, y2, (length / 2));
}
}
}