Как передать весь массив методу?
private void PassArray() {
String[] arrayw = new String[4];
//populate array
PrintA(arrayw[]);
}
private void PrintA(String[] a) {
//do whatever with array here
}
Как это сделать правильно?
Как передать весь массив методу?
private void PassArray() {
String[] arrayw = new String[4];
//populate array
PrintA(arrayw[]);
}
private void PrintA(String[] a) {
//do whatever with array here
}
Как это сделать правильно?
Вы делаете это:
private void PassArray(){
String[] arrayw = new String[4]; //populate array
PrintA(arrayw);
}
private void PrintA(String[] a){
//do whatever with array here
}
Просто передайте его как другую переменную. В Java массивы передаются по ссылке.
Просто удалите скобки из исходного кода.
PrintA(arryw);
private void PassArray(){
String[] arrayw = new String[4];
//populate array
PrintA(arrayw);
}
private void PrintA(String[] a){
//do whatever with array here
}
Вот и все.
Переменная массива - это просто указатель, поэтому вы просто передаете его так:
PrintA(arrayw);
Edit:
Немного больше. Если то, что вы хотите сделать, это создать COPY массива, вам придется передать массив в этот метод, а затем вручную создать там копию (не уверен, что Java имеет что-то вроде Array.CopyOf()
). В противном случае, вы будете проходить вокруг REFERENCE массива, поэтому, если вы измените любые значения элементов в нем, он будет изменен и для других методов.
В инструкции вызова метода
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
Существует важная точка массивов, которые часто не учат или не пропускают в классах Java. Когда массивы передаются функции, тогда другой указатель создается в один и тот же массив (тот же указатель никогда не передается). Вы можете манипулировать массивом, используя оба указателя, но как только вы назначаете второй указатель на новый массив в вызываемом методе и возвращаете обратно в функцию void to call, исходный указатель остается неизменным.
Вы можете напрямую запустить код здесь: 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
}
}
У вас синтаксис неправильный. Просто перейдите в имя массива. BTW - неплохо также прочитать некоторые распространенные вещи форматирования, например, в Java-методах следует начинать с буквы нижнего регистра (это не ошибка).
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();
}
}
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
}
Таким образом, мы можем передать массив функции, здесь эта функция печати будет печатать содержимое массива.
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();
}
}