#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));