【问题标题】:Write a method that returns the largest object in an array of objects编写一个返回对象数组中最大对象的方法
【发布时间】:2015-06-08 16:24:09
【问题描述】:

编写一个返回对象数组中最大对象的方法。方法签名是:

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

所有对象都是java.lang.Comparable 接口的实例。使用compareTo方法确定数组中对象的顺序。

在main方法中编写一个测试程序,创建一个由十个String组成的数组,一个由十个Integer组成的数组,以及一个由十个java.util.Dates组成的数组,并找到最大的String(即按字母顺序),@数组中的 987654326@ 和 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

【问题讨论】:

  • 先想想问题。在您从未见过的内容列表中,您观察到的绝对最大元素是负无穷大。你想以此为基础。
  • 这会伤害到你:tempObj = new Object();,因为你创建的对象没有实现compareTo,因此无法比较;不要使用它。而是将 tempObj 设置为数组中要开始的第一项。不要给你的 Max 类一个 compareTo 方法。这没有必要也不会分散注意力。

标签: java arrays methods interface


【解决方案1】:

你快到了,但是

  1. public void CompareTo 方法没用。顺便说一句,你从来不用它。
  2. 算法不正确。通过在纸上执行它,想想它会为 [4, 3, 2, 1] 返回什么。另外,想想如果 i 等于 a.length - 1a[i + 1] 是什么。数组的有效索引是什么?
  3. 我认为您可以放心地假设您的数组将始终包含至少一个元素。如果它是一个整数数组,并且包含 42,那么最大元素是多少?是42,还是new Object()
  4. 您的 main 方法创建了 3 个数组,但从不使用这些数组方法中的任何一个调用 max() 以查看它是否正常工作。

【讨论】:

  • @HovercraftFullOfEels 确实如此。答案已修改。
  • 感谢您的帮助!我将根据您的建议重新工作。
【解决方案2】:

怎么样:

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

【讨论】:

  • 我怀疑这是作业的目标。
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 2016-08-28
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
相关资源
最近更新 更多