0

DD/MM/YY 入力を DD/MM/YYYY 入力に変換するプログラムの一部を実装しようとしています。if ステートメントを使用して、入力数が 13 未満かどうかをプログラムに確認し、そうであれば、入力数に 2000 を追加して、12 が入力された場合は 2012 という結果を返します。数値が 13 を超えて 100 未満の場合、プログラムに 1900 を追加するように指示しました。

私はJavaに非常に慣れていないため、これまでに克服できなかった2つのコンパイラエラーが発生しています(36から減少、笑)。コンパイラ エラーは「ステートメントではありません」です。両方とも、else ステートメントのある行を参照します。コードは次のとおりです (明らかにまだ WIP であり、まだ完成したプログラムではありません) -

import java.util.*;

public class FindDay4Birthdate
{
    public static void main(String[] args)
    {
        String dayInput = "";
        String monthInput = "";
        String yearInput = "";
        int bday;
        int bmonth;
        int byear;

        String daysList[] = {
            "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
        };
        String monthList[] = {
            "January", "Feburary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
        };

        Scanner sc = new Scanner(System. in );
        sc.useDelimiter("[-/.\\s]");

        System.out.print("Please enter your date of birth (dd/mm/yyyy) - ");

        if (sc.hasNext())
        {
            dayInput = sc.next();
            monthInput = sc.next();
            yearInput = sc.next();

            bday = Integer.parseInt(dayInput);
            bmonth = Integer.parseInt(monthInput);
            byear = Integer.parseInt(yearInput);


        } // end if statement

        if (byear = (byear > 0));
        {
            if (byear = (byear < 13))
            {
                byear = (byear + 2000);
            }
            else(byear = (byear > 13 && byear < 100));
            {
                byear = (byear + 1900);
            }
        } // end if statement


        bmonth -= 1; //set month to correct array

        String day = daysList[bday];
        String month = monthList[bmonth];

        int yearCount = (byear - 1901);
        int daysInYear = 365;
        int dayCount = (daysInYear * yearCount);

        System.out.println("You were born on " + day + " " + bday + " " + month + " " + byear);

        System.out.println(yearCount + " " + daysInYear + " " + dayCount); // test output only

        /* Todo
         *
         *TASK 2 -
         *Implement daysPerMonth - Feb set to 28 days
         *Use count to determine correct day for birthdate
         *
         *TASK 3 -
         *User input needs to allow char based months and 2 digit years need to be converted to 4 digit years
         *Implement leap years */

    }
}
4

3 に答える 3

1

コンパイラ エラーを修正すると、このブロックから論理エラーが発生します。

    if (byear=(byear >0));{
        if (byear=(byear <13)); 
        {
            byear=(byear + 2000);
        }
        else  (byear =(byear >13 && byear <100)); 
        {
            byear=(byear + 1900);   
        } 
    }  // end if statement

byear=(byear >0)byearは、結果がまたはのbyear>0いずれかになることを意味します。これで、次の条件が意味をなさなくなりました。truefalse

byear = <condition>s内のそのようなステートメントをすべてifjustに変更し<condition>ます。すなわち(コピー&ペーストしないでください、違いを理解してください)

   if (byear >0){
        if (byear <13); 
        {
            byear=(byear + 2000);
        }
        else  (byear >13 && byear <100); 
        {
            byear=(byear + 1900);   
        } 
    }  // end if statement
于 2013-08-28T04:39:09.623 に答える
1

この部分はあなたの問題です。

if (byear = (byear > 0));
{
    if (byear = (byear < 13))
    {
        byear = (byear + 2000);
    }
    else(byear = (byear > 13 && byear < 100));
    {
        byear = (byear + 1900);
    }
} // end if statement

最初のエラーは、if ステートメントの最後のセミコロンです。

if (byear = (byear > 0)); // This ; symbol is to be removed

これにより、ステートメントを実行せずに if ブロックが終了します。

次のエラーは、値を比較しようとしている方法です。ここ。

byear = (byear > 0);

このステートメントは、truebyear が 0 より大きい場合に byear 変数を割り当てます。それ以外の場合falseは、byear がブール値ではなく整数であるため、コンパイラ エラーを引き起こします。したがって、最初の if ステートメントを次のように変更します

if (byear > 0)

ほら、それ自体に割り当てる必要はありません。同様に、比較ですべての割り当てを削除すると、エラーの一部が

if (byear > 0);
{
    if (byear < 13)
    {
        byear = (byear + 2000);
    }
    else(byear > 13 && byear < 100);
    {
        byear = (byear + 1900);
    }
} // end if statement

そして今、コンパイルする必要があります。

于 2013-08-28T04:48:04.243 に答える