2015-04-03 66 views
0

編寫一個返回對象數組中最大對象的方法。方法簽名是:編寫一個返回對象數組中最大對象的方法

public static Object max(java.lang.Comparable[] a) 

所有對象都是java.lang.Comparable接口的實例。數組中對象的順序是使用compareTo方法確定的。

寫創建的10個字符串數組,十個整數數組,和10 java.util.Dates的陣列的主要方法的測試程序,並發現最大String(即,在按字母順序),Integer,和Date在數組中。

給你的java類指定Max和你的java文件Max.java。

我很難理解我在這項任務中究竟需要做什麼。我真正掙扎的兩件事是如何使用接口和compareTo方法。據我的理解,接口只保存方法,那麼我將不得不在接口外部調用compareTo方法?無論如何,這是我迄今爲止。

public class Max { 
    public static Object max(java.lang.Comparable[] a) { 

     Object tempObj = new Object(); 

     for (int i = 0; i < a.length - 1; i++) { 
      if ((a[i]).compareTo(a[i + 1]) > 0) 
       tempObj = a[i]; 
      else 
       tempObj = a[i + 1]; 
     } 

     return tempObj; 
    } 

    // compare toMethod 
    public void CompareTo() { 
     a[i].compareTo(a[i + 1]); 
    } 
}// End Main 

class MaxTest implements Max { 
    public void main(String[] args) { 

     Integer[] intArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
     String[] stringArray = { "a", "b", "c", "d", "e", "f", "g", "h", "i", 
      "j" }; 
     java.util.Date[] dateArray = {}; 

     for (int j = 0; j < 10; j++) 
      dateArray[j] = new java.util.Date(); 

    }// End Main 
}//End Class 
+0

思考問題第一。在你以前從未見過的內容列表中,你觀察到的絕對最大元素是負無窮。你想從中建立起來。 – Makoto 2015-04-03 15:03:02

+1

這會傷害你:'tempObj = new Object();',因爲你正在創建一個沒有實現'compareTo'的對象,所以無法進行比較;不要使用它。相反,將tempObj設置爲數組中的第一個項目以開始。不要給你的Max類使用'compareTo'方法。這不是必要和分散注意力。 – 2015-04-03 15:04:17

回答

1

就快,但

  1. public void CompareTo方法是沒有用的。順便說一句,你從來沒有使用它。
  2. 算法不正確。想想它會在[4,3,2,1]中返回什麼,通過在紙上執行。另外,想想a[i + 1]是不是我等於a.length - 1。數組的有效索引是什麼?
  3. 我想你可以放心地假設你的數組總是至少有一個元素。如果它是一個整數數組,並且它包含42,那麼max元素是多少?是42,還是new Object()
  4. 你的主要方法創建3個數組,但從來沒有使用這些數組中的任何方法調用max()來查看它是否正常工作。
+0

這並不好:'Object tempObj = new Object();' – 2015-04-03 15:05:51

+0

@HovercraftFullOfEels的確如此。答覆修正。 – 2015-04-03 15:07:50

+0

感謝您的幫助!我將重新處理我的建議。 – Nova 2015-04-03 20:13:51

0

如何:

public static Object max(Comparable[] a) { 
    return Collections.max(Arrays.asList(a)); 
} 
+1

我懷疑這是作業的目標。 – 2015-04-03 15:06:08