2015-04-03 64 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