String [] args中的程序输入将看起来像这样的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);
最佳答案
每个杆都是一叠圆盘,因此请使用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];
}
}