2011-11-03 22 views
5

Tôi tương đối mới đối với java và việc truyền tham chiếu mà không có con trỏ gây nhầm lẫn cho tôi một chút. Tôi đã viết một hàm cho bài tập về nhà yêu cầu tôi trả về độ dài của đầu vào của người dùng và gán đầu vào sử dụng cho một mảng được truyền vào, khi phương thức thoát khỏi mảng đầu vào của người dùng bị mất, điều gì là sai.Mảng Java bị mất khi thoát phương pháp

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

Bạn khai báo arrItem7 ở đâu? – lc2817

+0

Xem bài đăng này để hiểu cách thức Java truyền các đối tượng: http://stackoverflow.com/questions/7893492/is-java-really-passing-objects-by-value/7893495#7893495 –

+3

Anh ấy truyền đi chúng tốt. Anh ta chỉ đưa họ trở lại trong 'mảng bản sao ' –

Trả lời

7

Vì bạn có đối số cho System.arraycopy() ngược.

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 intoArraycapture:

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

+1 để xác định vấn đề thực sự ở đây –

+0

Điểm tốt, trẻ padawan! – DarthVader

-2

Bản thân tham chiếu được truyền theo giá trị. Trong trường hợp này, bạn nên trả về chính mảng (capture) thay vì chiều dài.

0

Để làm những gì bạn muốn làm (được người dùng nhập vào và trở về kích thước của nó), bạn có thể làm điều này:

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

} 

Và nó sẽ cung cấp cho điều này:

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

Đó không phải là những gì ông đã nói bài tập về nhà của mình đòi hỏi ... –

+0

Ok, còn bây giờ thì sao? – lc2817

Các vấn đề liên quan