Ханойские башни на Java с использованием стеков

#java #stack #towers-of-hanoi

#java #стек #ханойские башни

Вопрос:

Я пишу программу для игры в игру towers of Hanoi на Java. Мы должны использовать стеки для представления башен. У меня есть массив из 3 стеков, два из которых я инициализирую как пустые, а последний должен быть заполнен определенным пользователем количеством дисков. У меня есть файл класса Hanoi, который был предоставлен, чтобы мы могли использовать конструктор Hanoi, который принимает целое число и создает диск такого размера. У меня возникли проблемы с определением кода для размещения дисков в стеке в моем методе инициализации (их размер является зеркалом их положения, поэтому диск 1 имеет размер 1 и т.д.). Любая помощь вообще будет оценена.

Вот мой конструктор диска класса Hanoi :

 public class Hanoi{

private int discSize; //size (radius) of the disc 

public Hanoi(int size){ //creates a disk of the specifed size
    discSize = size;
}
 

И мой метод инициализации

     public static Stack<Hanoi>[] initialize(int n){

   System.out.println("How many discs in the game?");
   Scanner sc = new Scanner(System.in);
   int numDisc = sc.nextInt();
   int size = numDisc;

   Stack<Hanoi>[] tower = new Stack[3];
    for (int i = 0; i < 3;i  ){
      tower[i] = new Stack<Hanoi>();
    }
    }


    Hanoi.PrintStacks(tower);
    // System.out.println(hanoi[2].peek());
     return tower;
 

Это должно привести к тому, что все они будут пустыми. Итак, должен ли я создать новый объект Hanoi для каждого диска на основе пользовательского ввода и поместить их в стек в обратном порядке?

Комментарии:

1. Прежде всего, это домашнее задание? Если это так, должно быть помечено как «домашнее задание». Во-вторых, вы инициализируете слишком много раз: достаточно первого цикла. Во втором и третьем вы просто перезаписываете 2-ю, 3-ю и 3-ю ячейки соответственно.

2. Из любопытства, вы случайно не учились в Виндзорском университете? Я бы рекомендовал иметь три класса для моделирования проблемы: Hanoi, Peg и Disk. В Ханое будут привязки A, B и C. У каждой привязки будет стопка дисков.

3. Да, это домашнее задание, и, спасибо, я исправлю инициализацию. Я должен инициализировать первую башню как стек, содержащий диски размером 1-n.

4. Нет, извините, но спасибо за совет. Нам дали класс hanoi, который хранит информацию об одном диске в игре.

Ответ №1:

Итак, я должен создать новый объект hanoi для каждого диска на основе пользовательского ввода и поместить их в стек в обратном порядке?

ДА.

 for (int i = numDisc; i > 0; --i)
    tower[0].push(new Hanoi(i));