gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:44 26 4
gpt4 key购买 nike

我有一项家庭作业要求我:

Write a method sort(int[] arr) that takes an integer array and uses a method from a previous exercise to determine if the array is sorted in increasing order or not. If it is already sorted, it should return the array, if it is not, the method should sort the array before returning it.

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

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;

提前致谢

最佳答案

为了让您真正学到一些东西,这是我的解决方案:

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

HereArrays.sort

的文档

这不仅更简洁,而且就地排序。这意味着它不会复制您传入的数组,执行工作,然后返回副本,它只是在原始数组上执行工作。这使它稍微快一点,意味着它占用的额外空间最少。当您的输入大小为 10 时没什么大不了的,但是当您达到 1000 万时。另外,请注意赋值的措辞:如果它已经排序,它应该返回数组,如果不是,该方法应该在返回之前对数组进行排序。从技术上讲,返回一个 原始数组的副本不是作业想要的。它想要原件。

因此它简短、干净、快速且内存效率高。一定不错吧?

不,因为它有一个巨大的缺陷。它打破了方法的隐含契约。一个改变参数的函数不应该返回任何东西,一个返回某些东西的函数不应该修改它的参数。这是软件工程的基本原则(Arrays.sort 演示了这一原则)。违反此规定会给那些认为您有能力并且不会违反此规定的人带来巨大的麻烦。

如果我们按照规则,sort 应该是这样的:

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

所以告诉你的老师你在互联网上遇到的一只装甲仓鼠说不要再教你糟糕的界面设计了。

关于java - 方法中的方法(家庭作业),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26128370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com