繁体   English   中英

if 和 else 语句未按预期工作

[英]if and else statements not working as intended

我正在制作一个非常简单的程序,主要是为了学习if/else语句。 该程序旨在确定您是否选择了正确的日期。

该程序旨在按以下方式工作:

  • 启动程序,它会提示您使用数字输入月份。
  • 如果你输入一个 1 到 12 之间的数字,它会给你另一个类似的指令,但需要好几天。
  • 如果你选择了另一个数字或一个词,它应该说“月错”。 根据您选择的月份,您将拥有不同的“正确”天数。 如果您选择正确,它应该显示“日期正确”。
  • 如果您选择的日期不正确,它应该显示“所选月份的日期错误”。

问题是,如果您在月份部分输入例如 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

请注意,我省略了分号和大括号。 那是故意的。 在这两种形式中, statementanotherStatement可以是以分号结尾的单个语句,也可以是由大括号内的一些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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM