В интересах вас на самом деле узнать что-то, вот мое решение:
public int[] sort(int[] arr) {
if (!isSorted(arr))
Arrays.sort(arr);
return arr;
}
Here документация для Arrays.sort
не только это более кратким, это также делает вид на месте. Это означает, что вместо копирования массива, который вы проходите, выполняете работу, а затем возвращаете копию, он просто выполняет работу с исходным массивом. Это делает его немного быстрее и означает, что он занимает минимальное пространство. Не такая большая сделка, когда ваш размер ввода равен 10, но это когда вы доберетесь до 10 миллионов. Также обратите внимание на формулировку задания: 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);
}
Так сказать, ваш учитель бронированный хомяк вы встретились на интернет сказал, чтобы остановить учу вас плохой дизайн интерфейса.
Вы не можете объявлять методы в пределах методов.В вашем задании вам предлагается использовать метод из предыдущего упражнения, чтобы проверить, отсортирован ли массив в порядке возрастания или нет. Используй это. – proulxs
'public void bar() {foo(); } 'Я вызываю метод' foo() 'из своего метода' bar() '. Та же концепция, что и ваше задание. – Compass