我是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;
}
}
答案 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 = true
将b1
的值重置为true
,而与您的问题isLeapYear
设置的先前值无关。所以其他部分永远不会执行。