0

みなさん、こんにちは。興味深い問題があります。オブジェクト指向プログラミングの 2 学期目です。Java 入門コースの最初のプロジェクトでは、その年の 1 月 1 日からの経過日数を計算する Date クラスを作成します。明らかにうるう年をチェックし、間違った入力を検証する必要があります。現在、ユーザーが入力する要素が少なすぎるか多すぎるか (1 つの文字列内) を確認しようとしています。これは私が持っているものですが、ロジックのどこかに欠陥があります。入力する要素が少なすぎると、エラーが表示され、再度読み取られます。入力が多すぎると、エラーが表示され、再度読み取られます。次に、3 つの要素を入力すると、以前に表示されたエラーが表示されます。1 つのエラーの後、3 つの要素のみが入力されたことを受け入れません。助けてください。

/* Accepts a string as an argument and splits it into 3 sections
 * month,day, and year
 */
void setDateFields(String dateString){ 
    String [] a  = {null};              // Array created to hold dateString
           a = dateString.split(" ");   // Split dateString into three sections
                                        // each ending with a white space

    // While to check if user entered month day and year
    while (a.length != 3){
             if(a.length < 3)
                  System.out.println("Insufficient number of elements\n" +
                                     "Enter a new date in the format of MM DD YYYY");
             else if(a.length > 3) 
                  System.out.println("Too many elements entered\n" +
                                     "Enter a new date in the format of MM DD YYYY");
            readDate();
            a = dateString.split(" ");
        }
    monthText = a[0];                   // The monthText is assigned the first index of the array
    dayText = a[1];                     // The dayText is assigned the second index of the array
    yearText = a[2];                    // The yearText is assigned the third index of the array4

    numericMonth = Integer.valueOf(monthText);
    numericDay = Integer.valueOf(dayText);
    numericYear = Integer.valueOf(yearText);
}
4

1 に答える 1

1

関数 setDateFields は常に、渡された最初の文字列を使用します。ユーザーから別の文字列を取得する必要があります (readDate() はそれを行うと思いますが、setDateFields() 内では何も変更できません)。

メインラインのコードは次のようになります。

 do {
   dateString = readDate();
} while(!checkDateString(dateString));

checkDateString() は、渡された文字列をチェックして、true または false を返す必要があります。

于 2013-02-11T02:43:10.760 に答える