как построить класс, который требует непостоянного количества куч - PullRequest
0 голосов
/ 20 февраля 2019

вход программы в аргументах String [] будет выглядеть следующим образом: 123 0 0, где каждый стержень Ханойской башни разделен пробелом, а каждое 1-значное целое число представляет диск такого размера.

Каксделать класс HanoiState, который позволит мне сохранить текущее состояние, заданное в качестве входных данных, и сделать так, чтобы перемещать любой диск в верхней части стержня, в данном случае это «1», от одного стержня к другомурядом с ним все просто.

Примеры командной строки: $ java hanoi 123 0 0 или $ java hanoi 12 0 4 0

Я думал о создании n очередей приоритетов для nколичество стержней после разбора ввода.Тем не менее, число стержней не является постоянным, и я не уверен, как это закодировать.

Можно ли также построить массив очередей с приоритетом?или список очередей с приоритетом?

public static class HanoiState {
    public HanoiState(int rods){

    }
}

 public static void main(String[] args) {
    if (args.length < 3) {
        return;
    }
    HanoiState a = new HanoiState(args.length - 1);

1 Ответ

0 голосов
/ 20 февраля 2019

Каждый стержень представляет собой стопку дисков, поэтому используйте класс Stack (java.util.Stack).Затем вы можете использовать методы push(item) и pop(), чтобы ставить и снимать целые числа с вершины каждого стержня.

Таким образом, каждый стержень имеет значение Stack из Integers.Чтобы снять диск со штанги n, позвоните rods[n].pop() и положить диск размером i на штангу n, позвоните rods[n].push(i).

import java.util.Stack;

public class HanoiState {
    Stack<Integer>[] rods;

    public HanoiState(int numOfRods){
        this.rods = (Stack<Integer>[]) new Stack[numOfRods];
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...