2011-11-03 9 views
5

Sono relativamente nuovo a java e il passaggio per riferimento senza puntatori mi confonde un po '. Ho scritto una funzione per i compiti che mi richiede di restituire la lunghezza dell'input dell'utente e di assegnare l'input di utilizzo a un array che viene passato, quando il metodo esce dall'array di input dell'utente è perso, cosa c'è di sbagliato.L'array Java viene perso all'uscita dal metodo

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

Dove si dichiara arrItem7? – lc2817

+0

Vedere questo post per capire come gli oggetti Java passano: http://stackoverflow.com/questions/7893492/is-java-really-passing-objects-by-value/7893495#7893495 –

+3

Li sta passando li bene. Li ha solo indietro in 'arraycopy' –

risposta

7

Perché si dispone degli argomenti su System.arraycopy() all'indietro.

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) 

Swap intoArray e capture:

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

+1 per identificare il vero problema qui –

+0

Buon punto, giovane padawan! – DarthVader

-2

Il riferimento stesso viene passato per valore. In questo caso, è necessario restituire lo stesso array (capture) anziché la lunghezza.

0

di fare ciò che si vuole fare (ottenere l'input dell'utente e restituire le sue dimensioni), si può fare questo:

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()); 
    } 

} 

E darà questo:

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

Non è quello che ha dichiarato che i suoi compiti richiedono ... –

+0

Ok, e adesso? – lc2817

Problemi correlati