1

私が行っているコース用の小さなJavaプログラムを作成する任務を負っていますが、次のコードブロックに問題があります:

        System.out.println("Please enter your first name:");
    userName = sc.nextLine();
    System.out.println("What year were you born in?");
    birthYear = sc.nextInt();
    System.out.println("In the 'dd.mm' format, what are the day and month of your birth?");
    dayMonth = sc.nextDouble();
    //Cast the user input of type double to an int for the day of Birth
    dayOfBirth = dayMonth.intValue();

    //Cast the double value for month and cast it to an int
    dayMonth = dayMonth - dayOfBirth;
    dayMonth = dayMonth * 100;
    dayMonth = Math.rint(dayMonth);
    monthOfBirth = dayMonth.intValue();
if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941)
{
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11)
    {
        System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear);
    }
        else if(monthOfBirth != 9 || monthOfBirth != 10 || monthOfBirth != 11)
        {
            System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear);
        }
}
if(birthYear != 2013 || birthYear != 2001 || birthYear != 1989 || birthYear != 1977 || birthYear != 1965 || birthYear != 1953 || birthYear != 1941)
{
     if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11)
    {
        System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear);
    }   
        else if(monthOfBirth != 9 || monthOfBirth != 10 || monthOfBirth != 11)
        {
            System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear);
        }
}

ただし、私の出力は次のようになります。

Please enter your first name:

Samuel

What year were you born in?

1977

In the 'dd.mm' format, what are the day and month of your birth?

09.09

Samuel was born during Spring on September 9 in Snake year 1977

Samuel was born during Spring on September 9 

私は明らかに繰り返し出力を望んでいませんが、if ステートメントのロジックが繰り返されている場所を確認するのに問題があります。

どんな助けでも大歓迎です。

皆さんありがとう、

〜サム。

4

8 に答える 8

1

次のいずれかのソリューションを選択できます。

1) || の代わりに && 演算子を使用する 2番目のifステートメントで

また

2) if(){}else{} // カマルの解

于 2013-04-04T11:00:56.567 に答える
1

複数の if( ... == ..|| ... == .. ||...) の代わりにコレクションを使用することをお勧めします

このような:

List<String> wrongYears = Arrays.asList("2013", "2001", "1989", "1977", ...);

そしてチェック:

if(wrongYears.contains(birthYear)
{
 ...
}

そして月の数字は同じ

あなたの論理エラーは明らかです

于 2013-04-04T11:05:20.860 に答える
1

2 を別々に使用する代わりに、 またはifのいずれif-elseかにしますif-else if

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941){
    ....
}
else if(birthYear != 2013 || birthYear != 2001 ||...){
....
}

を指定するif-ifと、両方のifステートメントが実行されますが、 を指定すると、最初のステートメントが失敗した場合にのみif-else if2 番目のステートメントが実行されます。else ifif

于 2013-04-04T10:52:04.647 に答える
0

可能な場合はelseステートメントを使用するため、2013、2001のテストを行う場合...直後にelseステートメントを作成します

于 2013-04-04T10:56:33.843 に答える
0

2 番目の if where all is != を単純な 'else' に置き換える必要があります。これは、いずれかのステートメントが true かどうかを既に確認しているためです。そのため、単純に else と書くと、論理的に等しくなり、はるかに読みやすくなります。

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941){
    ....
}
else { //not snake year
    ....
}
于 2013-04-04T10:57:18.863 に答える
0

答えはあなたの条件にあります。

推定dob = 1

if(dob == 1 || dob == 2 || dob == 3 ...)

dob == 1 であるため、true と評価されます。

if (dob != 1 || dob != 2 || dob != 3 ...)

dob != 2 であるため、true と評価されます。

あなたが使いたいのはAND/であり/&&ではないOR||

于 2013-04-04T11:00:57.243 に答える
0

問題は

if(birthYear != 2013 || birthYear != 2001 || birthYear != 1989 || birthYear != 1977 || birthYear != 1965 || birthYear != 1953 || birthYear != 1941

よく見ると、式の結果が常に try になるようにしています。一度に最大で 1 つだけが false になり、他のすべてが true になるため、最終的には常に true になります (混乱しますか?)。誕生年が 2013 年だとすると、最初の条件 (birthyear!=2013) は false になりますが、他の条件はすべて true になります。他の例を挙げれば、私が言おうとしていることがわかります。

実際には、わずかな変更でコードが修正されます。if (birthyear is in given years)条件のない単純な else が機能することは既に確認済みです。

if(birthYear == 2013 || birthYear == 2001 || birthYear == 1989 || birthYear == 1977 || birthYear == 1965 || birthYear == 1953 || birthYear == 1941)
{
    if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11)
    {
        System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear);
    }
        else// NO CHECK REQUIRED NOW
        {
            System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " in Snake year " + birthYear);
        }
}
//SEE THIS
else{
     if(monthOfBirth == 9 || monthOfBirth == 10 || monthOfBirth == 11)
    {
        System.out.println(userName + " was born during Spring on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear);
    }   
//AND
        else 
        {
            System.out.println(userName + " was born on " + monthOfBirthName + " " + dayOfBirth + " " + birthYear);
        }
}
于 2013-04-04T10:58:05.393 に答える