簡體   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