Java 输入一个数字,该数字不是数字,请重试

Java 输入一个数字,该数字不是数字,请重试,java,Java,基本上我想做的是: 让用户输入一个5位数的数字。如果 如果数字是奇数,它将打印“所有数字都是奇数”,如果 所有数字都不是奇数,然后它将打印出“不是所有数字” 数字是奇数”,然后它会询问用户是否要输入数字 按Y或N输入新号码,然后它会要求他们再输入5 数字和重复 我的问题是: 当用户没有输入一个5位数的数字,例如输入一个字符串/字符时,我希望它说“那不是一个数字,请再试一次”,我尝试用try and catch来实现这一点,我可以让它说“再试一次”,但我不确定在抛出错误后如何使代码返回到开头。对不

基本上我想做的是:

让用户输入一个5位数的数字。如果 如果数字是奇数,它将打印“所有数字都是奇数”,如果 所有数字都不是奇数,然后它将打印出“不是所有数字” 数字是奇数”,然后它会询问用户是否要输入数字 按Y或N输入新号码,然后它会要求他们再输入5 数字和重复

我的问题是:

当用户没有输入一个5位数的数字,例如输入一个字符串/字符时,我希望它说“那不是一个数字,请再试一次”,我尝试用try and catch来实现这一点,我可以让它说“再试一次”,但我不确定在抛出错误后如何使代码返回到开头。对不起,我不擅长java:-/ 当用户没有输入Y或N并输入一个数字时,我也有这个问题

代码:
注:我的回答只解决了他最初的问题。这段代码中还有很多我没有解决的问题。我想开门见山,只解决OP提出的问题

我刚刚重新整理了您的一些逻辑,并添加了几个continue语句。你很接近,你只需要重新安排一些事情

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    boolean yesno = true;
    while (yens == true) {
        System.out.println("Enter a 5 digit number...");
        try {
            int number = scan.nextInt();
            int length = String.valueOf(number).length();

            if (length == 5) {
                String digits = String.valueOf(number);
                char number1 = digits.charAt(0);
                char number2 = digits.charAt(1);
                char number3 = digits.charAt(2);
                char number4 = digits.charAt(3);
                char number5 = digits.charAt(4);

                if (number1 % 2 != 0 && number2 % 2 != 0 && number3 % 2 != 0 && number4 % 2 != 0 && number5 % 2 != 0) {
                    System.out.println("All of the numbers are odd...");
                } else {
                    System.out.println("Not all of the numbers are odd...");
                }
            } else {
                System.out.println("You did not enter a 5 digit number! Try again...");
                continue;
            }
        } catch (Exception e) {
            System.out.println("That was not a number! Try again...");
            //A newline might still be stuck in the scanner, so clear it
            scan.nextLine();
            continue;
        }
        try {
            System.out.println("Would you like to enter another number? (Y/N)");

            char letter = scan.next().charAt(0);
            if (letter == 'Y' || letter == 'y') {
                continue;
            } else if (letter == 'N' || letter == 'n') {
                yesno = false;
            } else {
                System.out.println("I will take that as a no!");
                yesno = false;
            }
        } catch (Exception e) {
            System.out.println("You did not enter a letter...");
            scan.nextLine();
        }
    }
    System.out.println("Goodbye!");
}
顺便说一下,代码中还有很多其他问题需要解决,但我只是简单地回答了您提出的问题,使执行在抛出异常后返回到循环的顶部


为什么人们不作解释就盲目地否决投票。我知道我没有解决他/她的代码中的所有问题。他/她问了一个问题,我解决了这个问题。这样做的目的不是要问一个详细的、具体的问题,而不是把代码塞满,要求解决每个问题吗?问多个问题不是违反规定吗?我解决了他提出的问题,没有更多,也没有更少,所以请解释为什么我的答案值得投反对票。

你在这里滥用了投票权<代码>(number1%2)使用的是number1的ascii代码,而不是其值。例如,如果
number1
“1”
(number1%2)
(49%2)
而不是
(1%2)
。但是你很幸运,
0
有ascii码48。这是什么意思/好的,谢谢,但是你能试着回答我的问题吗?检查一个数字是否是奇数不是比检查所有数字是否都是奇数更容易吗?检查另一个线程中的代码:嗨,谢谢,当我有你输入的代码时,当第一部分抛出异常时,当我运行时,它只是不断地说:输入一个5位数字。。。那不是一个数字!再试一次。。。输入一个5位数的数字。。。那不是一个数字!再试一次。。。输入一个5位数的数字。。。那不是一个数字!请重试…我已编辑代码以修复此问题。我没有意识到换行符值可能会卡在扫描仪中。请参阅上面我的更新代码。是的,我确实理解;),你没有输入答案的代码有什么问题?我不知道什么是ASCII:(…我以为我的整数1是实际数字的第一位?你在读字符,“1”是一个字符,与“a”或“#”一样。每个字符在ASCII系统中都有一个代码()。如果要使用字符代码,则必须将其转换为数字含义。
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);

    boolean yesno = true;
    while (yens == true) {
        System.out.println("Enter a 5 digit number...");
        try {
            int number = scan.nextInt();
            int length = String.valueOf(number).length();

            if (length == 5) {
                String digits = String.valueOf(number);
                char number1 = digits.charAt(0);
                char number2 = digits.charAt(1);
                char number3 = digits.charAt(2);
                char number4 = digits.charAt(3);
                char number5 = digits.charAt(4);

                if (number1 % 2 != 0 && number2 % 2 != 0 && number3 % 2 != 0 && number4 % 2 != 0 && number5 % 2 != 0) {
                    System.out.println("All of the numbers are odd...");
                } else {
                    System.out.println("Not all of the numbers are odd...");
                }
            } else {
                System.out.println("You did not enter a 5 digit number! Try again...");
                continue;
            }
        } catch (Exception e) {
            System.out.println("That was not a number! Try again...");
            //A newline might still be stuck in the scanner, so clear it
            scan.nextLine();
            continue;
        }
        try {
            System.out.println("Would you like to enter another number? (Y/N)");

            char letter = scan.next().charAt(0);
            if (letter == 'Y' || letter == 'y') {
                continue;
            } else if (letter == 'N' || letter == 'n') {
                yesno = false;
            } else {
                System.out.println("I will take that as a no!");
                yesno = false;
            }
        } catch (Exception e) {
            System.out.println("You did not enter a letter...");
            scan.nextLine();
        }
    }
    System.out.println("Goodbye!");
}