I am doing a Tower of Hanoi assignment for homework. I am trying to increase the i variable by one each time but it is increasing by 2. Also, the ("[g]et, [p]ut... string is being printed twice, not once. What is happening?! Please help!>

I am tried adding a i--; on if (p) but that didn't work.

import java.util.Scanner;

/**
 * Simulates a tower that can hold disks.
 * @author S. Camilleri
 * @author <your name>
 */
public class TowersOfHanoi {
    public static void main(String[] args) { 
        Scanner input = new Scanner(System.in);

        // This array holds the disks. A 0 represents no disk.
        int[] tower = new int[5];

        // This index represents the first available empty spot for a disk.
        int index = 0;

        int towerCounter = 0;
        int length = tower.length;

        boolean playing = true;    
        while (playing)
        {
            /********************
             * Display the tower
             ********************/
            System.out.println();
            System.out.print("{ ");

            while (towerCounter < length) {
                tower[towerCounter] = 0;
                System.out.print(tower[towerCounter]);
                towerCounter = towerCounter + 1;
            }
            String choice;
            int size;
            for (int i=0; i<length; i++) {

                /********************
                 * Get action from user
                 ********************/      
                System.out.println();      
                System.out.println("[g]et, [p]ut or [e]xit?");
                choice = input.nextLine();

                // Get
                if (choice.equals("g"))
                {
                    tower[i] = 0;

                    System.out.println();

                    towerCounter = 0;
                    i--;
                    System.out.print("{ ");

                    while (towerCounter < length) {

                        System.out.print(tower[towerCounter]);
                        towerCounter = towerCounter + 1;
                    }

                }

                // Put
                else if (choice.equals("p"))
                {
                    System.out.println("Disk?");
                    size = input.nextInt();
                    tower[i] = size;
                    towerCounter = 0;


                    System.out.print("{ ");
                    while (towerCounter < length) {

                        System.out.print(tower[towerCounter]);
                        towerCounter = towerCounter + 1;
                    }
                }

                // Exit
                else if (choice.equals("e"))
                {
                    playing = false; 
                }
            }
        }
    } 
}

I posted the whole code, as a request of an answerer.

2 Answers

1
Shanks D Shiva On Best Solutions

("[g]et, [p]ut... string is being printed twice because, after you give input and hit enter, the for loop is running once for the input you gave and the one more time for the "enter" button press after the input

According to what you wanted, decrement i in else if (choice.equals("p")) this elsed if block also

 else if (choice.equals("p")){
//your code
i--;
}
0
Harry Potter On

I recommend using Recursion, the "formula" is much easier: Here is the code:

public class TowerOf_Hanoi {
public static void main(String [] args){
    java.util.Scanner input=new java.util.Scanner(System.in);

    System.out.print("Enter Number of Disks:   ");
    int numDisk=input.nextInt();

    System.out.println("Moves are: ");
    steps(numDisk,'A','B','C');

}

public static void steps(int n, char fromTower, char toTower, char auxTower){

    //base case for Recursion
    if(n==1)        //if n=1 it will stop
        System.out.println("Move disk "+n+" from "+fromTower+" to "+toTower);
    else{
        steps(n-1,fromTower,auxTower,toTower);      //recursion
        System.out.println("Move disk "+n+" from "+fromTower+" to "+toTower);
        steps(n-1,auxTower,toTower,fromTower);
    }
  }
}