передать массив в метод Java - PullRequest
       68

передать массив в метод Java

31 голосов
/ 23 октября 2009

Как я могу передать весь массив в метод?

private void PassArray() {
    String[] arrayw = new String[4];
    //populate array
    PrintA(arrayw[]);
}

private void PrintA(String[] a) {
    //do whatever with array here
}

Как мне сделать это правильно?

Ответы [ 9 ]

52 голосов
/ 23 октября 2009

Вы делаете это:

private void PassArray(){
    String[] arrayw = new String[4]; //populate array
    <b>PrintA(arrayw);</b>
}

private void PrintA(String[] a){
    //do whatever with array here
}

Просто передайте его как другую переменную. В Java массивы передаются по ссылке.

13 голосов
/ 23 октября 2009

Просто удалите скобки из исходного кода.

PrintA(arryw);

private void PassArray(){
    String[] arrayw = new String[4];
    //populate array
    PrintA(arrayw);
}
private void PrintA(String[] a){
    //do whatever with array here
}

Это все.

8 голосов
/ 23 октября 2009

Переменная массива - это просто указатель, поэтому вы просто передаете ее так:

PrintA(arrayw);

Edit:

Немного подробнее. Если вы хотите создать копию массива, вам нужно будет передать массив в метод, а затем вручную создать его копию (не уверен, что в Java есть что-то вроде Array.CopyOf()). В противном случае вы передадите REFERENCE массива, поэтому, если вы измените какие-либо значения элементов в нем, он будет изменен и для других методов.

3 голосов
/ 28 января 2013

Важные пункты

  • вы должны использовать пакет java.util
  • массив может быть передан по ссылке

В операторе вызова метода

  • Не использовать какой-либо объект для передачи массива
  • используется только имя массива, не используйте тип данных или скобки массива []

Пример программы

import java.util.*;

class atg {
  void a() {
    int b[]={1,2,3,4,5,6,7};
    c(b);
  }

  void c(int b[]) {
    int e=b.length;
    for(int f=0;f<e;f++) {
      System.out.print(b[f]+" ");//Single Space
    }
  }

  public static void main(String args[]) {
    atg ob=new atg();
    ob.a();
  }
}

Пример программы вывода

1 2 3 4 5 6 7

2 голосов
/ 16 февраля 2017

Есть важный момент массивов, который часто не учат или пропускают на уроках Java. Когда массивы передаются в функцию, тогда создается другой указатель на тот же массив (тот же указатель никогда не передается). Вы можете манипулировать массивом, используя оба указателя, но как только вы назначите второй указатель новому массиву в вызываемом методе и вернитесь обратно через void к вызывающей функции, тогда оригинальный указатель все еще останется неизменным.

Вы можете напрямую запустить код здесь: https://www.compilejava.net/

import java.util.Arrays;

public class HelloWorld
{
    public static void main(String[] args)
    {
        int Main_Array[] = {20,19,18,4,16,15,14,4,12,11,9};
        Demo1.Demo1(Main_Array);
        // THE POINTER Main_Array IS NOT PASSED TO Demo1
        // A DIFFERENT POINTER TO THE SAME LOCATION OF Main_Array IS PASSED TO Demo1

        System.out.println("Main_Array = "+Arrays.toString(Main_Array));
        // outputs : Main_Array = [20, 19, 18, 4, 16, 15, 14, 4, 12, 11, 9]
        // Since Main_Array points to the original location,
        // I cannot access the results of Demo1 , Demo2 when they are void.
        // I can use array clone method in Demo1 to get the required result,
        // but it would be faster if Demo1 returned the result to main
    }
}

public class Demo1
{
    public static void Demo1(int A[])
    {
        int B[] = new int[A.length];
        System.out.println("B = "+Arrays.toString(B)); // output : B = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        Demo2.Demo2(A,B);
        System.out.println("B = "+Arrays.toString(B)); // output : B = [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        System.out.println("A = "+Arrays.toString(A)); // output : A = [20, 19, 18, 4, 16, 15, 14, 4, 12, 11, 9]

        A = B;
        // A was pointing to location of Main_Array, now it points to location of B
        // Main_Array pointer still keeps pointing to the original location in void main

        System.out.println("A = "+Arrays.toString(A)); // output : A = [9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        // Hence to access this result from main, I have to return it to main
    }
}
public class Demo2
{
    public static void Demo2(int AAA[],int BBB[])
    {
        BBB[0] = 9999;
        // BBB points to the same location as B in Demo1, so whatever I do
        // with BBB, I am manipulating the location. Since B points to the
        // same location, I can access the results from B
    }
}
0 голосов
/ 16 июля 2017

Таким образом, мы можем передать массив функции, здесь эта функция печати будет печатать содержимое массива.

public class PassArrayToFunc {

    public static void print(char [] arr) {
        for(int i = 0 ; i<arr.length;i++) {
            System.out.println(arr[i]);
        }
    }

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        char [] array = scan.next().toCharArray();
        print(array);
        scan.close();
    }

}
0 голосов
/ 09 июня 2017
public static void main(String[] args) {

    int[] A=new int[size];
      //code for take input in array
      int[] C=sorting(A); //pass array via method
      //and then print array

    }
public static int[] sorting(int[] a) {
     //code for work with array 
     return a; //retuen array
}
0 голосов
/ 17 октября 2016
class test
{
    void passArr()
    {
        int arr1[]={1,2,3,4,5,6,7,8,9};
        printArr(arr1);
    }

    void printArr(int[] arr2)
    {
        for(int i=0;i<arr2.length;i++)
        {
            System.out.println(arr2[i]+"  ");
        }
    }

    public static void main(String[] args)
    {
        test ob=new test();
        ob.passArr();
    }
}
0 голосов
/ 23 октября 2009

У вас неправильный синтаксис. Просто введите имя массива. Кстати, это хорошая идея, чтобы прочитать некоторые общие вещи форматирования тоже, например, в Java-методы должны начинаться со строчной буквы (это не ошибка, это соглашение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...