Почему мое целое число увеличивается на 2 вместо 1? - PullRequest
0 голосов
/ 25 апреля 2019

Я выполняю домашнее задание в Ханойской башне. Я пытаюсь увеличить переменную i на единицу каждый раз, но она увеличивается на 2. Кроме того, строка ("" [g] et, [p] ut ...) печатается дважды, а не один раз. Что происходит ?! Пожалуйста, помогите!>

Я пытался добавить i--; если (р), но это не сработало.

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; 
                }
            }
        }
    } 
}

Я отправил весь код по просьбе ответчика.

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

("[g] et, [p] ut ... string печатается дважды, потому что после того, как вы введете input и нажмете enter, цикл for будет запущен один раз для введенного вами ввода и еще один раз длянажмите кнопку «ввод» после ввода

В зависимости от того, что вы хотели, уменьшите значение i в другом случае, если (choice.equals ("p")), то это также происходит, если блок также

 else if (choice.equals("p")){
//your code
i--;
}
0 голосов
/ 25 апреля 2019

Я рекомендую использовать Рекурсия , "формула" намного проще: Вот код:

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);
    }
  }
}
...