if和else语句不按预期工作

时间:2015-09-17 18:26:21

标签: java if-statement

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

该计划的目的是:

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

问题是,如果您在月份部分中键入示例15,则说明

  

MonthWrongWrongdayinthemonthWrongdayinthemonth

而不仅仅是

  

月错

这是因为我在其他if/else语句中有if/else个语句吗?我试过在各处寻找这个,但我无法弄清楚出了什么问题。

当我尝试运行应用程序时,这是指向控制台图片的链接。

Picture of console

请原谅瑞典语。

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();

        }
    }


}

8 个答案:

答案 0 :(得分:2)

这里的真正问题以及所有问题的根源在于,您始终以分号结束if语句。例如,你写:

if (Dag > 0 && Dag < 32); 
    System.out.print("Korrekt Datum");

这相当于完​​全没有if声明!

if语句具有以下形式:

if (condition)
    statement

并且if-else语句具有以下形式:

if (condition)
    statement
else
    anotherStatement

请注意,我遗漏了分号和大括号。这是故意的。在这两种形式中,statementanotherStatement可以是以分号结尾的单个语句,也可以是由大括号中的Blockstatements组成的if。因此,当您以分号结束if (condition) ; 语句时,您实际上正在编写

if (Dag > 0 && Dag < 32)
    ; 
System.out.print("Korrekt Datum");

在上面引用的示例代码中,您正在编写

jQuery(document).ready(function(){
jQuery('.ttip').hover(
    function() {
        var offset = jQuery(this).offset();
        console.log(offset)
        var width = jQuery(this).outerWidth();
        var tooltipId = jQuery(this).attr("rel");
        jQuery('#tooltip-container').empty().load('tooltips.html' + tooltipId).stop(true).fadeIn(500);
        jQuery('#tooltip-container').css({top:offset.top, left:offset.left + width + 10}).show();
    },
    function() {
      jQuery('#tooltip-container').stop(true).fadeOut(500);
    });
});

取出额外的分号,你的生活会更快乐。

答案 1 :(得分:1)

由于if / else的一个分支已被执行,因此该名称的执行流程不会停止,它将继续执行第二个if / else,其结果也将被输出。

答案 2 :(得分:1)

无论第一个if语句是否成功,都会执行第二个if语句。要解决此问题,您可以添加

    return;

之后

    System.out.println("Felaktig Manad");

另外,要小心分号(;)。在多种情况下,你在if语句之后立即使用分号,这导致if语句根本不执行任何操作(它基本上被完全跳过)。用右括号(})替换那些分号。 根据您的IDE,您可以点击crtl + I,因此它会自动缩进代码,您可以清楚地看到它的作用。

答案 3 :(得分:1)

以下是您的代码格式更好,以便您可以看到您所犯的错误。有3个<?xml version="1.0" encoding="UTF-8"?> <TEI xml:id="3"> <teiHeader> <title>Letter 3</title> <date when="18880101" n="0"></date> </teiHeader> <text> <p>Content of letter 3</p> </text> </TEI> 语句以<?xml version="1.0" encoding="UTF-8"?> <CORRESPONDENCE> <TEI xml:id="3"> <teiHeader> <title>Letter 3</title> <date when="18880101" n="0"></date> </teiHeader> <text> <p>Content of letter 3</p> </text> </TEI> <TEI xml:id="1"> <teiHeader> <title>Letter 1</title> <date when="19990202" n="0"></date> </teiHeader> <text> <p>Content of letter 1</p> </text> </TEI> <TEI xml:id="2"> <teiHeader> <title>Letter 1</title> <date when="20010202" n="0"></date> </teiHeader> <text> <p>Content of letter 2</p> </text> </TEI> </CORRESPONDENCE> 结尾,而不是您想要的if。使用现在格式化的代码,您应该注意到,除了一堆嵌套的;语句之外,您还有几个{语句将全部运行,即使第一个语句失败也是如此。这就是你所看到的。要解决此问题,请移除if语句末尾的if,然后添加;。 (我用if)标记了错误的ifs

{

答案 4 :(得分:0)

您的大括号出现问题,请参阅以下代码: 如果

(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");
}

答案 5 :(得分:0)

在此行中用括号替换分号:

diff

答案 6 :(得分:0)

你是Gavin说,执行不会因为你输入一个else语句而停止,它会继续从那一点开始。 如果你希望它能像你期望的那样工作,你或者只要在if-block中if-statement为true时引入应该运行的代码,或者引入一个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;
}

答案 7 :(得分:0)

你需要将你的if(Manad == 2)放在属于if的else语句中(Manad == 1 .....还要把if(Manad == 4 ....在else中)声明(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();

}