Возвращаемые массивы в Java
У меня нет абсолютно никакой идеи, почему этот код не вернет массив... Я чувствую, что есть проблема с моим компилятором:
public class trial1{
public static void main(String[] args){
numbers();
}
public static int[] numbers(){
int[] A = {1,2,3};
return A;
}
}
Код ничего не возвращает. Это сводит меня с ума!
Ответы
Ответ 1
Он возвращает массив, но все возвращающее что-то (в том числе Array) делает именно то, что это звучит: возвращает значение. В вашем случае вы получаете значение numbers()
, которое оказывается массивом (это может быть что угодно, и вы все равно будете иметь эту проблему) и просто позволяете ему сидеть там.
Когда функция возвращает что-либо, она существенно заменяет строку, в которой она вызывается (в вашем случае: numbers();
), с возвращаемым значением. Итак, ваш метод main
действительно выполняет следующее:
public static void main(String[] args) {
{1,2,3};
}
Что, конечно, не будет делать ничего. Если вы хотите что-то сделать с возвращаемым значением, вы можете сделать что-то вроде этого:
public static void main(String[] args){
int[] result = numbers();
for (int i=0; i<result.length; i++) {
System.out.print(i+" ");
}
}
Ответ 2
Конечно, метод numbers()
возвращает массив, просто он ничего не делает с ним. Попробуйте это в main()
:
int[] array = numbers(); // obtain the array
System.out.println(Arrays.toString(array)); // now print it
Это покажет массив в консоли.
Ответ 3
У вас есть пара основных заблуждений о Java:
Я хочу, чтобы он возвращал массив без необходимости явно указывать консоль для печати.
1) Java не работает таким образом. Ничто никогда не печатается неявно. (Java не поддерживает интерактивный интерпретатор с циклом "repl"... как Python, Ruby и т.д.)
2) "Главное" ничего не "возвращает". Подпись метода:
public static void main(String[] args)
а void
означает "no value возвращается". (И, извините, нет, вы не можете заменить void
чем-то другим. Если вы это сделаете, команда java
не будет распознавать "основной" метод.)
3) Если (предположительно) вы хотите, чтобы ваш "основной" метод возвращал что-то, и вы изменили объявление, чтобы это разрешить, вам все равно придется использовать оператор return
, чтобы сообщить ему, какое значение нужно вернуть. В отличие от некоторого языка, Java не обрабатывает значение последнего оператора метода как возвращаемое значение для метода. Вы должны использовать инструкцию return
...
Ответ 4
Как сказал Луиджи, вам нужно изменить свой основной:
import java.util.Arrays;
public class trial1{
public static void main(String[] args){
int[] A = numbers();
System.out.println(Arrays.toString(A)); //Might require import of util.Arrays
}
public static int[] numbers(){
int[] A = {1,2,3};
return A;
}
}
Ответ 5
Вам нужно что-то сделать с возвращаемым значением...
import java.util.Arrays;
public class trial1{
public static void main(String[] args){
int[] B = numbers();
System.out.println(Arrays.toString(B));
}
public static int[] numbers(){
int[] A = {1,2,3};
return A;
}
}
Ответ 6
Если вы хотите использовать метод numbers
, вам нужен массив int для хранения возвращаемого значения.
public static void main(String[] args){
int[] someNumbers = numbers();
//do whatever you want with them...
System.out.println(Arrays.toString(someNumbers));
}