Ханойская башня, остановка скольжения - PullRequest
0 голосов
/ 31 декабря 2010

Я разработал решение проблемы Ханойской башни:

public static void bewege(int h, char quelle, char ablage, char ziel) {  
  if(h > 0){
     bewege(h - 1, quelle, ziel, ablage);
     System.out.println("Move "+ h +" from " + quelle + " to " + ziel);
     bewege(h - 1, ablage, quelle, ziel);
 }
}

Работает нормально.Теперь я хочу ограничить количество слайдов и выдать исключение, если достигнут определенный предел.Я пробовал со счетчиком, но он не работает:

class HanoiNK{

 public static void main(String args[]){
   Integer n = Integer.parseInt(args[0]);
   Integer k = Integer.parseInt(args[1]);

   try{
    bewege(k, n, 'A', 'B', 'C');
   }catch(Exception e){
    System.out.println(e);
   }
 }

 public static void bewege(int c, int h, char quelle, char ablage, char ziel) 
    throws Exception{  
  if(h > 0){
   if(c != 0){
   bewege(c, h - 1, quelle, ziel, ablage);
   c--;
   System.out.println("Move "+ h +" from " + quelle + " to " + ziel);
   bewege(c, h - 1, ablage, quelle, ziel);
   c--;
   }else{ 
    throw new Exception("stop sliding");
   }
  }
 }
}

Исключение никогда не выдается.Любые идеи?

ОБНОВЛЕНИЕ: результат 6 слайдов, но это должно быть 5 http://ideone.com/lm084

Ответы [ 3 ]

1 голос
/ 31 декабря 2010

Я думаю counter == c? Поэтому попробуйте тоже переместить c--; над вашим bewege(c, h - 1, ablage, quelle, ziel);, и это должно сработать, чтобы оно выглядело так:

 public static void bewege(int c, int h, char quelle, char ablage, char ziel) 
throws Exception{       
    if(h > 0){
        if(c != 0){
        c--;
        bewege(c, h - 1, quelle, ziel, ablage);
        System.out.println("Move "+ h +" from " + quelle + " to " + ziel);
        c--;
        bewege(c, h - 1, ablage, quelle, ziel);
        }else{  
            throw new Exception("stop sliding");
        }
    }
}
1 голос
/ 31 декабря 2010

По теме:

Мне кажется, что counter нигде не определено, и поэтому не должно компилироваться.

Теперь, когда выотредактировав ваш вопрос, чтобы исправить вышесказанное, исключение будет выдано, если ваш первый аргумент больше, чем ваш второй аргумент, например:

java HanoiNK 5 3

Исключение произойдет, когда c == 0 и h == 1,в этом случае.


Не по теме : Эти строки:

Integer n = Integer.parseInt(args[0]);
Integer k = Integer.parseInt(args[1]);

должны быть

int n = Integer.parseInt(args[0]);
int k = Integer.parseInt(args[1]);

..., посколькуparseInt возвращает int (не Integer), и функция, в которую вы передаете их, принимает int (не Integer).Автобокс, вероятно, позволяет вам сойти с рук, но это не нужно.

0 голосов
/ 31 декабря 2010

Я не уверен, где объявлена ​​переменная counter (кажется, ее здесь нет), но вы нигде не уменьшаете ее, поэтому ее значение никогда не изменится.

...