猿问

为什么我的整数增加了 2 而不是 1?

我正在为家庭作业做河内塔作业。我试图将 i 变量每次增加 1,但它增加了 2。此外, ("[g]et, [p]ut... 字符串被打印两次,而不是一次。发生了什么?!请帮忙!>


我尝试添加一个 i--; 在 if (p) 上,但这不起作用。


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;

                    }


                }

            }

        }

    } 

}

作为回答者的请求,我发布了整个代码。


Helenr
浏览 135回答 2
2回答

开满天机

("[g]et, [p]ut... 字符串被打印两次,因为在您输入并按 Enter 后,for 循环会为您输入的输入运行一次,再为“enter”运行一次输入后按下按钮根据你想要的,在 else if (choice.equals("p")) this elsed if 块中减少 i&nbsp;else if (choice.equals("p")){//your codei--;}

慕沐林林

我建议使用Recursion,“公式”要容易得多:这是代码:public class TowerOf_Hanoi {public static void main(String [] args){&nbsp; &nbsp; java.util.Scanner input=new java.util.Scanner(System.in);&nbsp; &nbsp; System.out.print("Enter Number of Disks:&nbsp; &nbsp;");&nbsp; &nbsp; int numDisk=input.nextInt();&nbsp; &nbsp; System.out.println("Moves are: ");&nbsp; &nbsp; steps(numDisk,'A','B','C');}public static void steps(int n, char fromTower, char toTower, char auxTower){&nbsp; &nbsp; //base case for Recursion&nbsp; &nbsp; if(n==1)&nbsp; &nbsp; &nbsp; &nbsp; //if n=1 it will stop&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Move disk "+n+" from "+fromTower+" to "+toTower);&nbsp; &nbsp; else{&nbsp; &nbsp; &nbsp; &nbsp; steps(n-1,fromTower,auxTower,toTower);&nbsp; &nbsp; &nbsp; //recursion&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Move disk "+n+" from "+fromTower+" to "+toTower);&nbsp; &nbsp; &nbsp; &nbsp; steps(n-1,auxTower,toTower,fromTower);&nbsp; &nbsp; }&nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答