Как я могу рассчитать количество ходов между стеками? - PullRequest
0 голосов
/ 04 апреля 2019

В моем текущем задании я должен перемещать элементы между тремя стеками.У меня есть еще один способ написать: 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;
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...