2013-02-11 49 views
0

大家好我有一個有趣的問題..這是我的第二學期在面向對象編程。我在java入門課程中的第一個項目涉及創建一個Date類,以便計算當年1月1日過去的日期。我必須明確檢查閏年並驗證不正確的輸入。我目前正在嘗試檢查用戶輸入太少或太多元素(在一個字符串內)。這就是我所擁有的,但邏輯在某個地方是有缺陷的。當我輸入太少的元素時,它顯示錯誤並再次讀取。然後我輸入太多它顯示錯誤並再次讀取。然後當我輸入三個元素時,它顯示先前顯示的錯誤。一個錯誤後,它不接受只有3個元素被輸入。請幫助。Array.length;是正確的

/* 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); 
} 
+2

'readDate()'做了什麼? – 2013-02-11 02:40:55

+0

爲什麼要在這裏將定義與定義分開? 'String [] a = dateString.split(「」);'讀得好多了。 – Yuushi 2013-02-11 02:42:30

+0

readDate();從用戶讀取一個字符串,只返回字符串,如果其內容是純粹的整數 – 2013-02-11 04:21:34

回答

1

你的功能setDateFields總是使用你,你需要從用戶那裏得到另一個字符串傳遞的第一個字符串(我相信readDate()這樣做,但不能修改裏面setDateFields什麼())。

您的主線代碼應該是這個樣子:

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

checkDateString()應該只是檢查字符串傳遞和返回true或false。

+0

是的,我確實有它定義,當我宣佈我必須發佈以前的版本..而我確實看到我的readDate();方法不會修改任何內容..我會修改並查看是否有幫助 – 2013-02-11 04:17:47