[英]if and else statements not working as intended
我正在制作一个非常简单的程序,主要是为了学习if/else
语句。 该程序旨在确定您是否选择了正确的日期。
该程序旨在按以下方式工作:
问题是,如果您在月份部分输入例如 15,它会指出
月错月错日月错日
而不仅仅是
月错
这是因为我if/else
其他的内声明if/else
语句? 我试过到处寻找这个,但我不知道出了什么问题..
这是我尝试运行应用程序时控制台图片的链接。
请原谅瑞典语。
import java.util.Scanner;
public class DateChecker111 {
public static void main (String args[]) {
Scanner scanner1 = new Scanner(System.in);
int Manad, Dag;
System.out.print("Ange Månad>");
Manad = scanner1.nextInt();
if (Manad > 0 && Manad < 13) {
}
else {
System.out.print("Felaktig Månad");
}
if (Manad == 1 || Manad == 3 || Manad == 5 || Manad == 7 || Manad == 8 || Manad == 10 || Manad == 12) {
System.out.print("Ange Dag>");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 32);
System.out.print("Korrekt Datum");
}
else {
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 2) {
System.out.print("Ange Dag");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 29);
System.out.print("Korrekt Datum");
}
else {
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 4 || Manad == 6 || Manad == 9 || Manad == 11) {
System.out.println("Ange Dag");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 31);
System.out.print("Korrekt Datum");
}
else {
System.out.print("Felaktig Dag i Månaden");
scanner1.close();
}
}
}
这里真正的问题,也是你所有麻烦的根源,是你总是以分号结束if
语句。 例如,你写:
if (Dag > 0 && Dag < 32);
System.out.print("Korrekt Datum");
这相当于根本没有if
语句!
if
语句具有以下形式:
if (condition)
statement
并且if-else
语句具有以下形式:
if (condition)
statement
else
anotherStatement
请注意,我省略了分号和大括号。 那是故意的。 在这两种形式中, statement
和anotherStatement
可以是以分号结尾的单个语句,也可以是由大括号内的一些statements
组成的Block
。 所以当你用分号结束if
语句时,你实际上是在写
if (condition)
;
在我上面引用的示例代码中,您正在编写
if (Dag > 0 && Dag < 32)
;
System.out.print("Korrekt Datum");
去掉多余的分号,你的生活会更快乐。
称谓的执行流程不会因为if/else的一个分支已经被执行而停止,它会继续执行第二个if/else,其结果也将被输出。
无论第一个是否成功,您的第二个 if 语句都会执行。 要解决这个问题,您可以添加
return;
紧接着
System.out.println("Felaktig Manad");
另外,使用分号 (;) 时要非常小心。 在多种情况下,您在 if 语句之后使用分号会导致 if 语句根本不执行任何操作(它基本上被完全跳过)。 用大括号 (}) 替换这些分号。 根据您的 IDE,您可能可以按 crtl+I 以便它自动缩进您的代码,您可以清楚地看到它的作用。
下面是你的代码格式更好,所以你可以看到你犯的错误。 有 3 个以;
结尾的if
语句;
, 而不是您想要的{
。 使用现在格式化的代码,您应该注意到,您有几个if
语句,而不是一堆嵌套的if
语句,它们将全部运行,即使第一个失败。 这就是你所看到的。 要解决此问题,请删除;
在if
语句的末尾,并添加{
。 (我用// BAD IF
标记了错误的 ifs)
import java.util.Scanner;
public class DateChecker111 {
public static void main (String args[]) {
Scanner scanner1 = new Scanner(System.in);
int Manad, Dag;
System.out.print("Ange Månad>");
Manad = scanner1.nextInt();
if (Manad > 0 && Manad < 13) {
}
else {
System.out.print("Felaktig Månad");
}
if (Manad == 1 || Manad == 3 || Manad == 5 || Manad == 7 || Manad == 8 || Manad == 10 || Manad == 12) {
System.out.print("Ange Dag>");
Dag = scanner1.nextInt();
// BAD IF
if (Dag > 0 && Dag < 32);
System.out.print("Korrekt Datum");
} else {
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 2) {
System.out.print("Ange Dag");
Dag = scanner1.nextInt();
// BAD IF
if (Dag > 0 && Dag < 29);
System.out.print("Korrekt Datum");
} else {
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 4 || Manad == 6 || Manad == 9 || Manad == 11) {
System.out.println("Ange Dag");
Dag = scanner1.nextInt();
// BAD IF
if (Dag > 0 && Dag < 31);
System.out.print("Korrekt Datum");
} else {
System.out.print("Felaktig Dag i Månaden");
scanner1.close();
}
}
}
您的大括号有问题,请参阅此代码:如果
(Manad == 1 || Manad == 3 || Manad == 5 || Manad == 7 || Manad == 8 || Manad == 10 || Manad == 12) {
System.out.print("Ange Dag>");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 32);
System.out.print("Korrekt Datum");
}
else {
System.out.print("Felaktig Dag i Månaden");
}
你的第一个大括号}
实际上关闭了主要的 if。 代码可以看成:
if (Manad == 1 || Manad == 3 || Manad == 5 || Manad == 7 || Manad == 8 || Manad == 10 || Manad == 12) {
System.out.print("Ange Dag>");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 32);
System.out.print("Korrekt Datum");
}
else {
System.out.print("Felaktig Dag i Månaden");
}
在这一行中用括号替换分号:
if (Dag > 0 && Dag < 32);
你是 Gavin 说的,执行不会因为你输入 else 语句而停止,它会从那一刻开始。 如果您希望它按预期工作,则必须将仅当 if 语句为真时才应运行的代码放入 if 块中,或者引入 return 语句。
if(foo == 1) {
if(bar == 2 {
//Do something
}
else {
//bar is not 2
}
}
else {
//foo is not 1
}
或者
if(foo == 1) {
}
else {
//foo is not 1
return;
}
if(bar == 2 {
//Do something
}
else {
//bar is not 2
return;
}
您需要将 if(Manad == 2) 放在属于 if(Manad == 1..... Manad ==2). 我做了一些评论并删除了一些括号。
Scanner scanner1 = new Scanner(System.in);
int Manad, Dag;
System.out.print("Ange Månad>");
Manad = scanner1.nextInt();
if (Manad > 0 && Manad < 13) {
// you're not doing something here
}
else {
System.out.print("Felaktig Månad");
}
if (Manad == 1 || Manad == 3 || Manad == 5 || Manad == 7 || Manad == 8 || Manad == 10 || Manad == 12) {
System.out.print("Ange Dag>");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 32) {
System.out.print("Korrekt Datum");
}
}
else { // called if Manad != 1,3,5,7,8,10, or 12
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 2) { // you may wanna put this if else statement inside the previous else
System.out.print("Ange Dag");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 29) {
System.out.print("Korrekt Datum");
}
}
else { // for now, this is called every time Mannad != 2
System.out.print("Felaktig Dag i Månaden");
}
if (Manad == 4 || Manad == 6 || Manad == 9 || Manad == 11) {
// put this if else statement inside else that belongs to Manad == 2
System.out.println("Ange Dag");
Dag = scanner1.nextInt();
if (Dag > 0 && Dag < 31) {
System.out.print("Korrekt Datum");
}
}
else {// for now, this is called every time Manad != 4,6,9, or 11
System.out.print("Felaktig Dag i Månaden");
scanner1.close();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.