Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Write a program in java that solves the Towers of Hanoi problem using recursion.

ID: 3671632 • Letter: W

Question

Write a program in java that solves the Towers of Hanoi problem using recursion. (No hard-coding!) The user must be able to specify the number of starting disks (2 < n < 8). At the start and each time a disk is moved, you should output the state of the entire domain so it is clear which disk was moved and to where. You may represent each disk with graphics (as in the image above) or with an integer (smaller numbers indicate smaller disks). For example, a starting state representation may look like this:

                Peg 1     |              3, 2, 1

                Peg 2     |

                Peg 3     |

Explanation / Answer

package assignment;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;

public class TowersOfHanoi {
  
   private ArrayList<Integer> peg1;
   private ArrayList<Integer> peg2;
   private ArrayList<Integer> peg3;
  
   public TowersOfHanoi(int discs) {
       peg1 = new ArrayList<Integer>();
       peg2 = new ArrayList<Integer>();
      
       peg3 = new ArrayList<Integer>();
      
           //InitialState
           for(int i =discs; i >= 1; i--)
               peg1.add(i);
   }
  
   public void hanoitowers(int n, int startPeg, int auxiliaryPeg, int endPeg) {
       System.out.println(" Peg1 "+peg1.toString()+" | Peg2 "+peg2.toString()+"   | Peg3 "+peg3.toString());
       if (n == 1) {
             // System.out.println("P"+startPeg + " -> " + "P"+endPeg);
               changeDiscsInPegs(startPeg, endPeg);
               System.out.println(" Peg1 "+peg1.toString()+" | Peg2 "+peg2.toString()+"   | Peg3 "+peg3.toString());
              } else {
               hanoitowers(n - 1, startPeg, endPeg, auxiliaryPeg);
             // System.out.println("P"+startPeg + " -> " + "P"+endPeg);
               changeDiscsInPegs(startPeg, endPeg);
               hanoitowers(n - 1, auxiliaryPeg, startPeg, endPeg);
           }
       }

      private void changeDiscsInPegs(int from, int to) {
          ArrayList<Integer> srcPeg;
          ArrayList<Integer> destPeg;
      
          srcPeg = from == 1 ? peg1 : (from == 2 ? peg2 : peg3);
          destPeg = to == 1 ? peg1 : (to == 2 ? peg2 : peg3);
      
          int index = srcPeg.size()-1;
          destPeg.add(srcPeg.get(index));
          srcPeg.remove(index);
      }
  
       public static void main(String[] args) {
  
           System.out.print("Enter number of discs: (2 < n <8) ");
           Scanner scanner = new Scanner(System.in);
           int discs = 2;
           while(discs < 3 || discs > 7) {
               discs = scanner.nextInt();
               if(discs < 3 || discs > 7)
                   System.out.print("Enter number of discs: (2 < n <8) ");
           }
           TowersOfHanoi towersOfHanoi = new TowersOfHanoi(discs);
      
         
           towersOfHanoi.hanoitowers(discs, 1, 2, 3);
       }
}

---output----

Enter number of discs: (2 < n <8) 2
Enter number of discs: (2 < n <8) 9
Enter number of discs: (2 < n <8) 8
Enter number of discs: (2 < n <8) 3
Peg1 [3, 2, 1] | Peg2 []   | Peg3 []
Peg1 [3, 2, 1] | Peg2 []   | Peg3 []
Peg1 [3, 2, 1] | Peg2 []   | Peg3 []
Peg1 [3, 2] | Peg2 []   | Peg3 [1]
Peg1 [3] | Peg2 [2]   | Peg3 [1]
Peg1 [3] | Peg2 [2, 1]   | Peg3 []
Peg1 [] | Peg2 [2, 1]   | Peg3 [3]
Peg1 [] | Peg2 [2, 1]   | Peg3 [3]
Peg1 [1] | Peg2 [2]   | Peg3 [3]
Peg1 [1] | Peg2 []   | Peg3 [3, 2]
Peg1 [] | Peg2 []   | Peg3 [3, 2, 1]

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote