在每个月计划中寻找日子

时间:2020-05-03 05:37:25

标签: java calendar

我是Java的初学者,我正在尝试创建一个程序,要求用户输入一个月,并打印该月的天数,并询问是否是a年。我尝试将扫描仪输入的字符串“是”转换为布尔值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;
    }       
}   

4 个答案:

答案 0 :(得分:2)

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

我很确定Boolean.parseBoolean(leapYear)仅在您输入“ true”或“ false”时有效。

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

if (b1 = "yes") {

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

if (b1 == "yes") {

几乎更糟,因为它仅在b1指向完全相同的“是”字符串对象(几乎永远不会出现)时才返回true。因此,使用.equals()可以达到您的期望。

答案 1 :(得分:1)

您想要这样的东西:

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

使用b1 = yes删除if else块。您不能将String与boolean进行比较,为了进行比较,您需要两个等号,一个会尝试将yes分配给布尔值,这就是错误的出处。

答案 2 :(得分:1)

尝试以下代码。 我需要在下面标记一些代码。

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;
    }
}

答案 3 :(得分:1)

您正在将代码分配给布尔变量时,您的代码不可编译。那不管用。试试下面的代码

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设置的先前值无关。所以其他部分永远不会执行。

相关问题