1

今日は、定規に目盛りを配置する再帰的な方法に取り組んでいます。割り当ては、目盛りを配置し、その高さと位置を出力することを示しています。x & y を ( 0,0 )、幅 20、高さ 10 と仮定すると、プログラムは次のように表示する必要が あり ます

。 位置 15.0、高さ 5.0 位置 12.5、高さ 2.5 位置 17.5、高さ 2.5







許容される最小の高さは 2.00 で、各位置は大きい方の半分の高さに注意してください。私は多くのことを試しましたが、アイデアはありますが、機能していません。位置 10 から 7.5 までの数字を取得しますが、x 座標を移動しているだけでも右側がごちゃごちゃしています。これは私のコードです。あなたが私を助けてくれることを願っています。

*main method contains the input for user and the method calls.
        DrawRulerLeft(x,y,width,height);     //Method to draw left part of rule
        DrawRulerRight(x,y,width,height);   //Method to draw right part of rule

public static void DrawRulerLeft(double x, double y, double w, double h) {

  if (h > 2 ) {  //smallest height aloud
        w = w/2;  
        System.out.println("Tick position:+ w + " Tick height: " + h );
        DrawRulerLeft(x, y, w, h/2);
 } 
 }

//Recursive method to draw right of rule
 public static void DrawRulerRight(double x, double y, double w, double h) {

     if (h > 2 && w >= 0) {
        DrawRulerRight(x+w/2,y,w/2,h/2); 
        System.out.println("Tick position:" + x + " Tick height: " + h );
         }

    }
4

3 に答える 3

1

両方の半分でのバイナリトラバーサルと同様に、このアプローチを試してください:-

//Recursive method to draw 
private static void DrawRulerRecursive(double w, double h) {
  if (h > 2) {
    System.out.println("Tick position:" + w + " Tick height: " + h);
    DrawRuler(w+w/2,h/2);
    DrawRuler(w-w/2,h/2);
  }
}

public static void DrawRuler(int w, int h) {
   double mid = (0 + w)/2; // Range: (0:20), Mid: 10
   DrawRulerRecursive(mid, h);
}

tickこの問題は、レベルを下げるときに高さが半分になる BST の構築に似ています。私の提案は、深さ優先の順序でのトラバーサルですが、幅優先のトラバーサルを使用することもできます。

于 2013-10-22T03:43:53.847 に答える