英文:
Finding days in each month program
问题
public class Main {
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 isLeapYear = leapYear.equalsIgnoreCase("yes");
switch (month) {
case "January":
numberOfDays = 31;
break;
case "February":
if (isLeapYear) {
numberOfDays = 29;
} else {
numberOfDays = 28;
}
break;
}
}
}
英文:
i'm a beginner at java and i'm trying to create a program that asks a user to enter a month, and prints the number of days in that month, as well as asking if it is a leap year. I've tried converting a String "yes" input from the scanner, into a boolean true or false input, however, i keep receiving the error cannot convert string into boolean. I've tried the parseString method however with no success. Any insight or help into this issue is greatly appreciated. Thanks for your time!
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;
}
}
答案1
得分: 2
boolean b1 = false;
if (leapyear.equals("yes")) {
b1 = true;
}
我相当确定 Boolean.parseBoolean(leapYear) 只能在输入 "true" 或 "false" 时才起作用。
另外,在表达式中使用 = 要小心。
if (b1 = "yes") {
可能会导致错误,但是
if (b1 == "yes") {
几乎更糟,因为只有当 b1 指向完全相同的 "yes" 字符串对象时才会返回 true,而这几乎是不可能的。因此使用 .equals() 方法,它会按预期进行比较。
英文:
boolean b1 = false;
if (leapyear.equals("yes")) {
b1 = true;
}
I'm pretty sure Boolean.parseBoolean(leapYear) would only work if you entered "true" or "false".
Also, be careful using = in an expression.
if (b1 = "yes") {
probably will give you an error, but
if (b1 == "yes") {
is almost worse because it will only return true if b1 points to the exact same "yes" string object which it almost never will. Hence the use of .equals() which does what you expect.
答案2
得分: 1
你想要类似这样的代码:
boolean b1 = "yes".equals(leapYear);
用 b1 替代 if else 代码块中的 yes。你不能将字符串与布尔值直接比较,比较时需要使用两个等号。一个等号会尝试将 "yes" 赋值给一个布尔值,这就是你出错的地方。
英文:
You want something like this:
boolean b1 = "yes".equals(leapYear);
Remove the if else block with b1 = yes. You cant compare an String to a boolean, for comparison you need two equal signs, one would try to assign yes to a boolean, that's where your error comes from.
答案3
得分: 1
请尝试以下代码。我已经标注了下面需要进行一些代码修正的部分。
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int numberOfDays = 0;
System.out.println("请输入月份:");
String month = scan.nextLine();
System.out.print("这是闰年吗?");
String leapYear = scan.nextLine();
boolean b1;
if ("yes".equalsIgnoreCase(leapYear)) {
b1 = true;
}
else {
b1 = false;
}
switch(month) {
case "一月":
numberOfDays = 31;
break;
case "二月":
if (b1) {
numberOfDays = 29;
} else {
numberOfDays = 28;
}
break;
}
}
英文:
Try the below code.
some code correction needed I have marked the below.
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;
}
}
答案4
得分: 1
你的代码无法编译,因为你把一个字符串赋值给了一个布尔变量。这是行不通的。尝试以下代码:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int numberOfDays = 0;
System.out.print("月份是什么? ");
String month = scan.nextLine();
System.out.print("这是闰年吗? ");
String leapYear = scan.nextLine();
boolean b1;
if (leapYear.equalsIgnoreCase("是")) {
b1 = true;
} else {
b1 = false;
}
switch (month) {
case "一月":
numberOfDays = 31;
break;
case "二月":
if (b1 == true) {
numberOfDays = 29;
} else {
numberOfDays = 28;
}
break;
}
}
编辑:在Java中,单个=
用于赋值,而双=
(==
)用于进行相等性测试。因此,在之前的代码中,b = true
会将b1
的值重置为true
,而不考虑之前由你的“这是闰年吗”的问题设置的值,因此else部分永远不会被执行。
英文:
Your code is not compilable as you are assigning a String to boolean variable. That will not work. Try the below code
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;
}
}
Edit: In Java single =
is used for assignment and double =
(==
) is used for equality test. So in previous code the b = true
reset the value of b1
to true
irrespective of previous value set by your question of isLeapYear
. and so else part is never executed.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论