Ханойская башня показывает прямоугольник из холста - PullRequest
0 голосов
/ 08 ноября 2019

Здравствуйте, я пытаюсь написать программу башни Ханоя на Яве. Я думаю, что большая часть программы правильная, но я не понимаю, почему мой прямоугольник находится за пределами холста. Вот часть моего кода: package AS8;

     * @param src The source tower
     * @param dst The destination tower
     * @param aux The auxiliary tower
     * @param nb number of disks to move
     */
    static void hanoi(int[] src, int[] dst, int[] aux, int nb) {

    if(nb==1){
       move(src, dst);
        }else{
        hanoi(src,aux,dst,(nb-1));
        move(src,dst);
        hanoi(aux,dst,src,(nb-1));
        }
    }

    /**
     * Move the top disk from the source tower to the destination tower
     * @param src the source tower
     * @param dst the destination tower
     */
    static void move(int[] src, int[] dst) {
//copy the top disk of source tower to the top of the destination tower
System.arraycopy(src, size(src), dst, size(dst), 1);

//remove the top disk of the source tower
   src[size(src)]=src[size(src)-1];
//show the movement with the show() method
show();
 }

    /**
     * Computes the current size of the tower
     * @param twr the tower
     * @return the size of the tower
     */
    static int size(int[] twr) {
        int i = 0;
        while (i < LEVELS && twr[i] > 0) i++;
        return i;
    }

    private static int[] tower(int size) {
        int[] res = new int[LEVELS];
        Arrays.fill(res, 0);
        for (int i = 0; i < size; i++) {
            res[i] = size - i;
        }
        return res;
    }

    static void show() {
        painter.usedCanvas().clear();
        show(towerA, 100);
        show(towerB, 250);
        show(towerC, 400);
        painter.pause(PAUSE);
    }

    static void show(int[] twr, int x) {
        for (int i = 0; i < LEVELS; i++) {
            painter.fillRectangle(x - twr[i] * 10, 200 - 20 * i, twr[i] * 20, 20);
        }
    }

}

в выводе сказано, что rectqngle находится за пределами canvas, но я думаю, что самый большой диск из towerC будет на x = 340, поэтому я непонимать.

...