Хотел бы понять как работает return, в принципе я понимаю как он работает. Но встал вопрос, в примере ниже я запускаю метод с пустым массивом, в методе массив заполняется, и возвращается массив, этот массив занимает место пустого? и получается если запускать метод с параметром, то return вернет значение этому аргументу? А если без аргумента?
import java.util.Scanner;
class ex{
public static void main(String[] args) {
Scanner scr=new Scanner(System.in);
int arrSize=0;
int []ourArray;
System.out.print("Enter size of array ");
arrSize=scr.nextInt();
ourArray=new int[arrSize];
arrayLength test = new arrayLength();
test.enterValue(ourArray);
/*for (int i=0;i<ourArray.length ;i++ ) {
System.out.print(ourArray[i]+" ");
}*/
maxminavr test2=new maxminavr();
test2.maxNum(ourArray);
test2.minNum(ourArray);
test2.avrNum(ourArray);
}
}
класс с заполнением массива
import java.util.Scanner;
class arrayLength{
Scanner scr=new Scanner(System.in);
private int [] newArray;
public int[] enterValue(int []arrEnt){
newArray=arrEnt;
for (int i=0;i<newArray.length;i++ ) {
newArray[i]=scr.nextInt();
}
return newArray;
}
}
Но встал вопрос, в примере ниже я запускаю метод с пустым массивом, в методе массив заполняется и возвращается массив, этот массив занимает место пустого?
Нет, это и есть тот пустой массив.
В enterValue
:
public int[] enterValue(int []arrEnt){
newArray=arrEnt;
for (int i=0;i<newArray.length;i++ ) {
newArray[i]=scr.nextInt();
}
return newArray;
}
arrEnt
newArray
записываете ссылку на arrEnt
: newArray = arrEnt;
. Т.е. выражение newArray = arrEnt;
не сделает копию массива, а сохранит ссылку на массив в переменную newArray
arrEnt
: newArray[i] = ...
arrEnt
: return newArray;
Таким образом, вы в этом коде заполняете ourArray
и только его:
ourArray=new int[arrSize];
arrayLength test = new arrayLength();
test.enterValue(ourArray);
и получается если запускать метод с параметром, то return вернет значение этому аргументу?
Как писал выше из return
вернется этот же аргумент, а точнее ссылка на тот же массив
А если без аргумента?
Будет ошибка при компиляции
Т.е. смысл вам возвращать массив в текущем виде нет, поэтому можно переписать функцию как:
public void enterValue(int []arrEnt){
newArray=arrEnt;
for (int i=0;i<newArray.length;i++ ) {
newArray[i]=scr.nextInt();
}
}
Случай, когда нужно возвращать массив -- это если в аргумент вы передаете массив, внутри функции создаете новый массив, что-то с ним делаете на основе массива из аргумента, а после из функции возвращаете новый массив.
относительно поставленного вопроса gil9red ответил.
Но я бы хотел посоветовать избегать изменения переданных объектов внутри функции(в том числе и массивов)
То есть данный код лучше переписать так:
import java.util.Scanner;
class ex{
public static void main(String[] args) {
Scanner scr=new Scanner(System.in);
int arrSize=0;
System.out.print("Enter size of array ");
arrSize=scr.nextInt();
ourArray=new int[arrSize];
arrayLength test = new arrayLength();
int[] ourArray = test.enterValue(arrSize);
/*for (int i=0;i<ourArray.length ;i++ ) {
System.out.print(ourArray[i]+" ");
}*/
maxminavr test2=new maxminavr();
test2.maxNum(ourArray);
test2.minNum(ourArray);
test2.avrNum(ourArray);
}
}
import java.util.Scanner;
class arrayLength{
Scanner scr=new Scanner(System.in);
private int[] newArray;
public int[] enterValue(int size){
newArray=new int[size];
for (int i=0;i<newArray.length;i++ ) {
newArray[i]=scr.nextInt();
}
return newArray;
}}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть массив объектов, у них нет точного распорядка и идентификации , но мне нужно найти объект с определенным id и изменить в нем свойство...
Идея в том , что бы код считал сколько есть слов в массиве , которые заканчиваются "у" "іе"