Здравствуйте, я пытаюсь написать программу башни Ханоя на Яве. Я думаю, что большая часть программы правильная, но я не понимаю, почему мой прямоугольник находится за пределами холста. Вот часть моего кода: 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, поэтому я непонимать.