0

嗨,这是一个河内塔益智计划。现在,如果提示“输入光盘数量”为空白(即在未输入任何整数值的情况下按下回车键),我无法让程序解决 3 个光盘问题。

*我的 hanoi 方法中的 if/else 语句是我认为问题所在。我评论了我认为问题出在哪里。如果在提示“输入光盘数量”时未输入任何内容,如何让程序仅解决 3 张光盘?*

代码:

import java.util.Scanner;

public class TowerOfHanoi4 {
    static int moves = 0;
    static boolean displayMoves = false;
   static int blank = 3;

    public static void main(String[] args) {

        System.out.println("Enter the Number of Discs : ");
        Scanner scanner = new Scanner(System.in);
        int iHeight = scanner.nextInt();
        char source = 'S', auxiliary = 'D', destination = 'A'; // name poles or
                                                                // 'Needles'

        System.out.println("Press 'v' or 'V' for a list of moves");
        Scanner show = new Scanner(System.in);
        String c = show.next();
        displayMoves = c.equalsIgnoreCase("v");


        hanoi(iHeight, source, destination, auxiliary);
        System.out.println(" Total Moves : " + moves);
    }

    static void hanoi(int height, char source, char destination, char auxiliary) {
        if (height >= 1) {
            hanoi(height - 1, source, auxiliary, destination);
            if (displayMoves) {
                System.out.println(" Move disc from needle " + source + " to "
                        + destination);
            }
            moves++;
            hanoi(height - 1, auxiliary, destination, source);
        }
//       else (height == blank) {                                  //I think the problem
//          hanoi(height - 1, source, auxiliary, destination);//Lies with this
//          moves++;                                          //else
//          hanoi(height - 1, auxiliary, destination, source);//statement         
//       }   
    }
}
4

1 回答 1

1

您可以在获取输入本身后立即进行检查,而不是在方法中进行检查。

String height = scanner.nextLine();
int iHeight = height.trim().isEmpty() ? 3 : Integer.parseInt(height);
// The above code snippet will read the input and set the iHeight value as 3 if no input is entered.

并从方法中删除else部分。hanoi()

编辑:如果不需要显示步骤的选项,您需要添加if并显示选项以在其中显示步骤。

String height = scanner.nextLine();
int iHeight = 3; // Default is 3
if (!height.trim().isEmpty()) { // If not empty
    iHeight = Integer.parseInt(height); // Use that value

    // And display the option to show steps
    System.out.println("Press 'v' or 'V' for a list of moves");
    Scanner show = new Scanner(System.in);
    String c = show.next();
    displayMoves = c.equalsIgnoreCase("v");
}
于 2013-11-06T04:40:41.237 回答