В моем текущем задании я должен перемещать элементы между тремя стеками.У меня есть еще один способ написать: getNumberOfMoves (), и он должен вычислить количество ходов между стеками.
Я хочу добавить какой-нибудь калькулятор, но в назначении говорится, что я должен написать более конкретныйметод для этого.Любые предложения о том, как можно рассчитать количество ходов, используя метод?
Кроме того, у меня проблемы с методом move ().Я должен использовать push () и pop () из другого класса.Я сделал некоторые просто посмотреть, что происходит, см. Код ниже, но я думаю, что я должен делать это с рекурсией.Таким образом, базовые случаи должны заключаться в том, что если первый стек «from» содержит только один элемент, то его следует переместить непосредственно в «to», в противном случае последний элемент следует переместить в стек «help», а затем в «to».,Но вопрос в том, если я делаю это рекурсивно, разве я не должен вызывать метод внутри метода?Тогда как мне использовать pop () и push ()?
Спасибо за совет!
public class StackPlay {
/**
* Returns the current number of times an element has been moved
* @return the number of moves
*/
public static long getNumberOfMoves() {
}
public static void move(myStack from,
myStack to,
myStack help,
int n) {
help.push(from.pop());
to.push(help.pop());
}
public static void main(String[] args) {
int size = 3;
myStack from = new myStack(size);
myStack to = new myStack();
myStack help = new myStack();
System.out.println("Start state");
System.out.println(" From: " + from);
System.out.println(" To: " + to);
System.out.println(" Help: " + help);
System.out.println(" Number of moves: " + getNumberOfMoves());
move(from, to, help, size);
System.out.println("End state");
System.out.println(" From: " + from);
System.out.println(" To: " + to);
System.out.println(" Help: " + help);
System.out.println(" Number of moves: " + getNumberOfMoves());
}
}
и отдельный класс:
public class myStack {
private ArrayList<Integer> specStack;
public myStack() {
specStack = new ArrayList<Integer>();
}
public myStack(int n) {
this.specStack = new ArrayList<Integer>(n);
int i;
for (i=0; i<n; i++) {
specStack.add(i, n-i);
}
}
public void push(int x) {
if (specStack.size() == 0) {
specStack.add(x);
}
else if (x > specStack.get(specStack.size() -1)) {
throw new RuntimeException("Number too high");
}
else {
specStack.add(x);
}
}
public int pop() {
if (specStack.size() == 0) {
throw new RuntimeException("Empty stack");
}
else {
int length = specStack.size() -1;
int topEl = specStack.get(length);
specStack.remove(length);
return topEl;
}
}
public String toString() {
String arrList = "[";
int i;
for (i = 0; i < specStack.size(); i++) {
if (i == specStack.size() -1) {
arrList = arrList + specStack.get(i);
}
else {
arrList = arrList + specStack.get(i) + ",";}
}
arrList = arrList + "]";
return arrList;
}
}