[英]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.