在每个月程序中查找天数

Finding days in each month program

我是 java 的初学者,我正在尝试创建一个程序,要求用户输入月份,并打印该月的天数,并询问是否是闰年。我已经尝试将来自扫描仪的字符串 "yes" 输入转换为布尔值 true 或 false 输入,但是,我一直收到无法将字符串转换为布尔值的错误。我试过 parseString 方法但是没有成功。非常感谢对此问题的任何见解或帮助。感谢您的宝贵时间!

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

    System.out.print("What's the month? ");
    String month = scan.nextLine();
    System.out.print("Is it a leap year? ");
    String leapYear = scan.nextLine();

    boolean b1 = Boolean.parseBoolean(leapYear);
    if (b1 = "yes") {
        b1 = true;
    }
    else {
        b1 = false;
    }

    switch(month) {
        case "January":                 
            numberOfDays = 31;
            break;              
        case "February":
            if (b1 = true) {
                numberOfDays = 29;
            } else {
                numberOfDays = 28;
            }
        break;
    }       
}   

你想要这样的东西:

boolean b1 = "yes".equals(leapYear);

删除 b1 = yes 的 if else 块。您不能将字符串与布尔值进行比较,为了进行比较,您需要两个等号,一个会尝试将 yes 分配给布尔值,这就是您的错误来源。

boolean b1 = false;
if (leapyear.equals("yes")) {
    b1 = true;
}

我很确定 Boolean.parseBoolean(闰年) 只有在您输入 "true" 或 "false" 时才有效。

此外,在表达式中使用 = 时要小心。

if (b1 = "yes") {

可能会给你一个错误,但是

if (b1 == "yes") {

几乎更糟,因为它只会 return 如果 b1 指向完全相同的 "yes" 字符串对象,它几乎永远不会。因此使用 .equals() 可以满足您的期望。

试试下面的代码。 需要一些代码更正我在下面做了标记。

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

    System.out.println("What's the month? ");
    String month = scan.nextLine();
    System.out.print("Is it a leap year? ");
    String leapYear = scan.nextLine();

    boolean b1;
    if ("yes".equalsIgnoreCase(leapYear)) {
        b1 = true;
    }
    else {
        b1 = false;
    }

    switch(month) {
        case "January":                 
            numberOfDays = 31;
            break;              
        case "February":
            if (b1) {
                numberOfDays = 29;
            } else {
                numberOfDays = 28;
            }
        break;
    }
}

您的代码不可编译,因为您将字符串分配给布尔变量。这是行不通的。试试下面的代码

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

        System.out.print("What's the month? ");
        String month = scan.nextLine();
        System.out.print("Is it a leap year? ");
        String leapYear = scan.nextLine();

        boolean b1;
        if (leapYear.equalsIgnoreCase( "Yes")) {
            b1 = true;
        }
        else {
            b1 = false;
        }

        switch(month) {
            case "January":
                numberOfDays = 31;
                break;
            case "February":
                if (b1 == true) {
                    numberOfDays = 29;
                } else {
                    numberOfDays = 28;
                }
                break;
        }
    }

编辑:在 Java 中,单 = 用于赋值,双 = (==) 用于相等性测试。因此,在之前的代码中,b = trueb1 的值重置为 true,而不管您的 isLeapYear 问题设置的先前值如何。所以其他部分永远不会执行。