Array.length;是正确的

时间:2013-02-11 02:38:40

标签: java arrays string date split

大家好,我有一个有趣的问题..这是我在面向对象编程中的第二个学期。我在java课程简介中的第一个项目涉及创建一个Date类,该类导致计算从该年1月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);
}

1 个答案:

答案 0 :(得分:1)

你的函数setDateFields总是使用你传入的第一个字符串。你需要从用户那里得到另一个字符串(我认为readDate()会这样做,但它不能修改setDateFields()中的任何内容。

您的主线代码应如下所示:

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

checkDateString()应该只检查传入的字符串并返回true或false。