java - 为什么我的代码会跳转到catch部分?

标签 java

public static void main(String[] args) {

    Scanner consoleScanner = new Scanner(System.in);

    int hour = 0;
    int minute = 0;
    String meridiem = "";
    String zero = "";
    boolean errorOccured = false;

    do {

        try {
            System.out.print("Please enter the hour:");
            hour = consoleScanner.nextInt();
            System.out.println("Please enter the minute:");
            minute = consoleScanner.nextInt();
            if (minute <= 9)
                zero = "0";
            System.out.println("Please enter either \"AM\" or \"PM\":");
            meridiem = consoleScanner.nextLine();

            if (hour < 1 || hour > 12) {
                throw new InvalidHourException();
            }
            if (minute < 0 || minute > 59) {
                throw new InvalidMinuteException();
            }
            if (!meridiem.equals("AM") || !meridiem.equals("PM")) {
                throw new InvalidMeridiemException();
            }

        } catch (InvalidHourException hourEx) {
            System.out.println(hourEx.getMessage());
        } catch (InvalidMinuteException minuteEx) {
            System.out.println(minuteEx.getMessage());
        } catch (InvalidMeridiemException meriEx) {
            System.out.println(meriEx.getMessage());
        }

    } while (errorOccured);

    System.out.println(hour + ":" + zero + minute + meridiem + " is a valid time.");

}

}

我的输出如下:

请输入时间:1 请输入分钟:3 请输入“AM”或“PM”: 请输入上午或下午。 1:03 为有效时间。

我想知道为什么它不让我设置 AM 或 PM 而只是跳到异常?

最佳答案

这种情况总是会抛出异常,因为 meridiem 不能同时等于“AM”和“PM”:

        if (!meridiem.equals("AM") || !meridiem.equals("PM")) {
            throw new InvalidMeridiemException();
        }

应该是:

        if (!meridiem.equals("AM") && !meridiem.equals("PM")) {
            throw new InvalidMeridiemException();
        }

关于java - 为什么我的代码会跳转到catch部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718284/

相关文章:

java - JPA 和 PostgreSQL : How do I call a stored procedure with void return type?

java - 我正在尝试从广播接收器发出 API 请求,有人能提到正确的方法吗?

java - log4j2 - 从属性问题设置文件路径

java - 在java 8中从父级排序子级列表

java.sql.SQLException : Cannot create JDBC driver of class '' for connect URL 'null' ] with root cause 异常

java - 发送时发生异常,javax.mail.MessagingException : 530 5. 7.57 SMTP;客户端未通过身份验证,无法在 MAIL FROM 期间发送匿名邮件

java - 改造:用一个元素反序列化数组时出错: "out of START_ARRAY token"

java - 不同类中的方法之间的 "share"变量的正确方法是什么?

java - 使用 http 协议(protocol)在端口 8080 上无法识别端口 8443 上通过 ssl 的 Spring 安全登录

java - 用 Java Collections 中的什么替换遗留 Stack?