2011-11-03 9 views
5

Soy relativamente nuevo en Java, y el pasar por referencia sin punteros me confunde un poco. Escribí una función para la tarea que me exige devolver la longitud de la entrada del usuario y asignar la entrada de uso a una matriz que se transfiere, cuando el método sale de la matriz de entrada de usuario se pierde, lo que está mal.Arreglo de Java se pierde al salir del método

public static int readArray(char[] intoArray) 
    { 
     char[] capture = captureInputAsCharArray(); //User input comes back as char[] 
     System.arraycopy(intoArray,0, capture, 0, capture.length); 

     return capture.length; 
    } 

public static main(String[] args) 
{ 
     size = readArray(arrItem7); // item 7 
     System.out.println(size); 
     printOneInLine(arrItem7); // prints individual elements of array 
} 
+1

¿Dónde declara arrItem7? – lc2817

+0

Consulte esta publicación para comprender cómo pasan los objetos Java: http://stackoverflow.com/questions/7893492/is-java-really-passing-objects-by-value/7893495#7893495 –

+3

Los pasa muy bien. Simplemente los tiene al revés en 'arraycopy' –

Respuesta

7

Porque tiene argumentos hacia System.arraycopy() hacia atrás.

http://download.oracle.com/javase/6/docs/api/java/lang/System.html

public static void arraycopy(Object src, 
          int srcPos, 
          Object dest, 
          int destPos, 
          int length) 

Intercambiar intoArray y capture:

System.arraycopy(capture,0, intoArray, 0, capture.length); 
+1

+1 para identificar el problema real aquí –

+0

¡Buen punto, joven padawan! – DarthVader

-2

La referencia en sí es pasado por su valor. En este caso, debe devolver la misma matriz (capture) en lugar de la longitud.

0

para hacer lo que quiere hacer (obtener la entrada del usuario y volver a su tamaño), se puede hacer esto:

import java.util.*; 


class Main{ 
    public static void main(String argv[]) 
    { 
    Scanner sc = new Scanner(System.in); 
    System.out.println("Enter something"); 
    String line = sc.nextLine(); 
    char [] my_array = line.toCharArray(); 
    System.out.println("You entered an input of length "+line.length()); 
    } 

} 

Y le dará esto:

$ java Main 
Enter something 
Hello 
You entered an input of length 5 
+0

Eso no es lo que dijo que su tarea requiere ... –

+0

Ok, ¿y ahora? – lc2817

Cuestiones relacionadas