1

在java中,如果用户输入错误的输入,你如何让程序在你问他们的问题上重新启动,例如在我发布在下面的代码中,我得到了问题选择0-9之间的数字我如何让它重新启动如果用户输入了错误的输入,例如 10 或更高或字符串,则该问题。我将不胜感激任何提示或建议。

import java.util.Scanner;

public class Project2 {

    public static void main(String[] args) {
        String PlayAgain = "Y";

        while (PlayAgain.equals("Y")) {
            // Generate a secret Numbers
            int number1 = (int) (Math.random() * 10);
            int number2 = (int) (Math.random() * 10);
            int number3 = (int) (Math.random() * 10);
            int arr[] = new int[3];
            arr[0] = number1;
            arr[1] = number2;
            arr[2] = number3;

            boolean g1;
            boolean g2;
            boolean g3;

            g1 = false;
            g2 = false;
            g3 = false;

            // Show secret numbers
            System.out.println(arr[0] + ", " + arr[1] + ", " + arr[2]);

            Scanner input = new Scanner(System.in);

            // Prompt the user to enter a guess

            System.out.print("Enter your lottery pick (0-9): ");
            int guess1 = input.nextInt();

            if (guess1 > 9) {
                System.out
                        .println("Wrong input enter only 1 number between 0-9: ");
            } else {

            }

            System.out.print("Enter your lottery pick (0-9): ");
            int guess2 = input.nextInt();

            if (guess2 > 9) {
                System.out
                        .println("Wrong input enter only 1 number between 0-9: ");
            } else {

            }

            System.out.print("Enter your lottery pick (0-9): ");
            int guess3 = input.nextInt();

            if (guess3 > 9) {
                System.out
                        .println("Wrong input enter only 1 number between 0-9: ");
            } else {
                continue;

            }

            // Show secret numbers and your numbers
            System.out.println("The Secret Numbers are " + arr[0] + (", ")
                    + arr[1] + (", ") + arr[2]);
            System.out.println("Your Numbers are " + guess1 + (", ") + guess2
                    + (", ") + guess3);

            if (guess1 == arr[0] && guess2 == arr[1] && guess3 == arr[2]) {
                System.out
                        .println("Three Matching in Exact order, You Won $100,000 ");
            } else if ((

            (guess1 == arr[1] || guess1 == arr[2])
                    && (guess2 == arr[0] || guess2 == arr[2]) && (guess3 == arr[0] || guess3 == arr[1]))

                    ||

                    ((guess1 == arr[0])
                            && (guess2 == arr[1] || guess2 == arr[2]) && (guess3 == arr[1] || guess3 == arr[2]))

                    ||

                    ((guess2 == arr[1])
                            && (guess3 == arr[0] || guess3 == arr[1]) && (guess1 == arr[0] || guess1 == arr[2]))

                    ||

                    ((guess3 == arr[2])
                            && (guess2 == arr[0] || guess2 == arr[2]) && (guess1 == arr[1] || guess1 == arr[0])))

            {
                System.out
                        .println("Three Matching in Different order, You Won $10,000 ");
            } else if (

            ((guess1 == arr[0] || guess1 == arr[1] || guess1 == arr[2]) && (guess2 == arr[0]
                    || guess2 == arr[1] || guess2 == arr[2]))
                    && (guess3 != arr[0] || guess3 != arr[1] || guess3 != arr[2])

                    ||

                    ((guess1 == arr[0] || guess1 == arr[1] || guess1 == arr[2]) && (guess3 == arr[0]
                            || guess3 == arr[1] || guess3 == arr[2]))
                    && (guess2 != arr[0] || guess2 != arr[1] || guess2 != arr[2])

                    ||

                    ((guess2 == arr[0] || guess2 == arr[1] || guess2 == arr[2]) && (guess3 == arr[0]
                            || guess3 == arr[1] || guess3 == arr[2]))
                    && (guess1 != arr[0] || guess1 != arr[1] || guess1 != arr[2])

            ) {
                System.out.println("Any Two Numbers Matching, You Win $1,000 ");
            } else if ((guess1 == arr[0] || guess1 == arr[1] || guess1 == arr[2])
                    && (guess2 != arr[0] || guess2 != arr[1] || guess2 != arr[2])
                    && (guess3 != arr[0] || guess3 != arr[1] || guess3 != arr[2])

                    ||

                    (guess2 == arr[0] || guess2 == arr[1] || guess2 == arr[2])
                    && (guess1 != arr[0] || guess1 != arr[1] || guess1 != arr[2])
                    && (guess3 != arr[0] || guess3 != arr[1] || guess3 != arr[2])

                    ||

                    (guess3 == arr[0] || guess3 == arr[1] || guess3 == arr[2])
                    && (guess1 != arr[0] || guess1 != arr[1] || guess1 != arr[2])
                    && (guess2 != arr[0] || guess2 != arr[1] || guess2 != arr[2])

            )// close if
            {
                System.out.println("Any One Number Matching, You Win $10 ");
            } else {
                System.out.println("You Lose Sorry ");
            }

            System.out.println("Would you like to play again? Y/N ");
            PlayAgain = input.next();
            PlayAgain = PlayAgain.toUpperCase();

        }// end of while loop
    } // end of main

} // end of class

对不起,如果代码很难阅读,我是这个东西的初学者,我在发布之前确实使用了 ctrl + shift + f 来格式化代码。

4

2 回答 2

3

最好将一些逻辑分解成单独的方法来处理代码重用。但是,为了使其与您显示的内容保持一致并使示例易于阅读,您可以在输入数字的地方执行以下操作:

        boolean isValid = false;
        while (!isValid) {
            System.out.print("Enter your lottery pick (0-9): ");

            int guess1 = -1;
            try {
                guess1 = input.nextInt();
            } catch (Exception e) {
                // Read any pending input which would be invalid characters at this point
                input.next();
            }

            if (guess1 > 9 || guess1 < 0) {
                System.out.println("Wrong input enter only 1 number between 0-9: ");
            } else {
                isValid = true;
            }
        }
于 2012-12-08T03:22:54.373 回答
0

您的代码“不优雅”。尝试使用这样的模式:

伪java代码:

while (true) {
    // get input
    if (input is "exit")
        break;
    if (input is bad)
        continue;
    // process input
}
于 2012-12-08T03:24:05.733 回答