方法中的方法(家庭作业)

时间:2014-09-30 19:15:23

标签: java

我有一个家庭作业,我被要求:

  

编写一个方法sort(int[] arr),它接受​​一个整数数组并使用一个   来自上一个练习的方法,以确定数组是否已排序   不断增加秩序。如果它已经排序,它应该返回   数组,如果不是,该方法应该在返回之前对数组进行排序   它

我的问题是我不知道如何处理这项任务?我应该修改以前的方法,在新方法中调用它还是可以在方法中创建方法? 这是我之前写的方法:

public static void isSorted(int[] checkArray) {
    boolean isSorted = true;
    for (int i = 1; i < checkArray.length; i++) {
        if (checkArray[i - 1] > checkArray[i]) {
            isSorted = false;

提前完成

3 个答案:

答案 0 :(得分:1)

我读过&#34;使用[方法]&#34;意思是&#34;调用方法&#34;。也就是说,在排序之前测试排序看起来似乎毫无意义,因此可能值得对那些给你那份任务的人进行双重检查。

您之前的方法存在的一个问题是它没有返回任何内容。你需要做些什么来使它变得有用。

答案 1 :(得分:1)

这是你想要做的:

public int[] sort(int[] arr)
{
    if (isSorted(arr))
        return arr;
    else
    {
         \\Your sorting code here

         return sorted_array;
    }
}

答案 2 :(得分:1)

为了您实际学习的东西,这是我的解决方案:

public int[] sort(int[] arr) {
    if (!isSorted(arr))
        Arrays.sort(arr);
    return arr;
}

HereArrays.sort

的文档

这不仅更简洁,而且还可以进行就地排序。这意味着,不是复制传入的数组,执行工作,然后返回副本,而只是在原始数组上进行工作。这使得它稍微快一点,意味着它占用了最少量的额外空间。当您的输入大小为10时,并没有那么大的交易,但是当您达到1000万时。另外,请注意赋值的措辞:If it is already sorted, it should return the array, if it is not, the method should sort the array before returning it.从技术上讲,返回原始数组的副本并不是赋值所需的。它想要原件。

因此它简短,干净,快速且内存效率高。它一定很好,对吧?

不,因为它有一个巨大的缺陷。它违反了该方法的隐含合同。更改其参数的函数不应返回任何内容,并且返回某些内容的函数不应修改其参数。这是软件工程的基本原理(也是Arrays.sort演示的原理)。违反此规定可能会给那些认为自己胜任并且不会违反这一规则的人带来巨大的问题。

如果我们遵循该规则,sort应为:

public void sort(int[] arr) {
    if (!isSorted(arr))
        Arrays.sort(arr);
}

告诉你的老师你在互联网上遇到的装甲仓鼠说停止教你糟糕的界面设计。