方法

2014-09-30 59 views
3

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

写方法sort(int[] arr)是一个整数数组,并使用 方法从之前的练习,以确定数组排序为 递增或不递增。如果它已经排序,它应该返回 数组,如果不是,该方法应该在返回 之前对数组进行排序。

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

+8

您不能在方法中声明方法。您的任务是告诉您使用先前练习中的方法来检查数组是否按递增顺序排序。用它。 – proulxs 2014-09-30 19:17:27

+0

'public void bar(){foo(); }'我从'bar()'方法调用'foo()'方法。与您的任务相同的概念。 – Compass 2014-09-30 19:19:36

回答

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); 
} 

所以告诉你的老师在网上说要停止教你可怜的接口设计满足你的装甲仓鼠。

+0

非常感谢!这似乎是一个更好的方法。我一定会告诉他那个哈哈。 – 2014-10-01 07:14:56

1

我读

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; 

感谢名单“使用[的]法”来表示“调用该方法”。也就是说,在排序之前对排序进行测试似乎毫无意义,因此值得仔细检查与谁分配给你的人。

你以前的方法的一个问题是它不返回任何东西。你需要做些什么才能使它有用。

+1

有一些排序算法在排序后的数据上表现很差,所以事先做一次完整性检查是合理的。 – Floegipoky 2014-09-30 19:25:25

+0

是的。在实际的任务中,我正在调用该方法并打印结果。 – 2014-09-30 19:26:50

+0

@Floegipoky:采取的点。而且,这只是一次练习。 – NPE 2014-09-30 19:28:38

1

这是你想要做什么:

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

     return sorted_array; 
    } 
}