Java

Существует метод в джава.

public void sort(int...args){
int[] a = new int[args.length] - не уверен, что количество таким образом будет создан массив длинной в количество переданных параметров int, и как дальше автоматичское присвоение сделать тоже не знаю.
У меня два вопроса. 1: что значит "не уверен"? Ты попробовал или не пробовал? Сначала нужно проверять, а потом не быть уверенным. 2: скорее всего в данном случае достаточно: int[] a = args;
Ерлан Нуржанов
Ерлан Нуржанов
60 169
Лучший ответ
Евгений Москалец Операция присвоения над объектами в Java не создает новый объект с копиями значений правого операнда, а заставляет левый операнд (читай ссылку) ссылаться на тот же объект, что и правый. Т. е. результатом будет 2 ссылки на один и тот же объект.
ну например так

static int[] Sort(int ...args)
{
int a[]=new int[args.length];
int i=0; for(int ar : args)a[i++]=ar;
return a;
}
Димон Зырянов
Димон Зырянов
86 650
Никак не могу понять смысл параметров переменной длины для метода, сортирующего массив (насколько я могу судить по его названию) и имеющего тип возвращаемого значения void. Если на вызывающей стороне у вас нет ссылки на передаваемый массив, то все это действо не имеет смысла, а если она есть - нет смысла использовать varargs, достаточно использовать обычный массив, т. к. Вы только запутаете того, кто будет читать Ваш код.
Далее. Если на вызывающей стороне у Вас все таки имеется ссылка на передаваемый в качестве аргумента массив, то делать его копию в методе совершенно не нужно, а т. к. тип возвращаемого значения - void, это сведет на ноль все ваши усилия. Массивы в Java реализованы в качестве объектов, а объекты передаются методам по ссылке. Это, в свою очередь значит, что ваша ссылка args ссылается на тот же самый объект, который вы передаете, и можно смело осуществлять все планируемые действия над ним через эту ссылку, ведь она - лишь другое имя для того же самого объекта.

А конкретно по поводу Ваших вопросов:
1) В поле length массива args хранится его длина, таким образом в операторе int a[] = new int[args.length]; создается новый массив имеющий длину, равную длине массива args. 100%.
2) Копировать массив можно как вручную в цикле (способом, который выше описал Иван Сигаев), так и используя предназначенные для этого методы (что гораздо эффективнее при работе с большими массивами). Их описание Вы можете совершенно спокойно найти набрав в гугле запрос "копирование массивов в Java" или подобный на Ваше усмотрение.