Возвращаемые массивы в 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));
}