2017-05-15 14 views
6

Tôi đang cố gắng hiểu bài tập Java sau đây. Thậm chí chạy trình gỡ lỗi tôi không hiểu các chi tiết của bản in thứ hai và thứ ba:in ra để giải thích về tập thể dục java

1, 2, 3, 4

1, 2, 4, 4

1, 2, 4, 8

Tôi hiểu rằng bản in đầu tiên là mảng, phần tử in dòng thứ hai [2] của phần tử mảng và dòng thứ ba [3]. Đây là mã:

public class TR1 
{ 
    public static void main(String[] args) 
    { 
     int[] v = {1, 2, 3, 4 }; 
     print(v); 
     x(v, v[2] - 1); 
     print(v); 
     x(v, v[3] - 1); 
     print(v); 
    } 

    public static void x(int array[], int y) 
    { 
     array[y] = array[y - 1] * 2; 
    } 

    public static void print(int array[]) 
    { 
     System.out.print(array[0]); 
     for (int i = 1; i < array.length; i++) 
      System.out.print(", " + array[i]); 
     System.out.println(); 
    } 
} 
+0

ví dụ: tại sao nó được in 8? – matrix

+3

Câu hỏi hay cho một người mới ;-) – GhostCat

+1

@GhostCat Tôi đồng ý, tôi nghĩ rằng đây là một câu hỏi rất hay. – EJoshuaS

Trả lời

2

Hãy xem những gì phương pháp này thực hiện:

public static void x(int array[], int y) 
    { 
     array[y] = array[y - 1] * 2; 
    } 

Phải mất giá trị tại index y-1, nhân nó 2, sau đó gán kết quả này để chỉ số y.

Bắt đầu từ mảng: {1,2,3,4}

Cuộc gọi với v[2] - 1 mất giá trị tại index 2 (đó là 3), và substracts 1, vì vậy chúng tôi có y = 2.

Từ những gì chúng tôi đã nói trước đây, phương pháp này có giá trị tại index 1 (y-1) là 2, nhân nó 2 vì vậy chúng tôi có được 4, và gán cho rằng chỉ số 2 (y).

mảng hiện tại: {1,2,4,4}

Cuộc gọi với v[3] - 1 mất giá trị tại index 3 (đó là 4), và substracts 1, vì vậy chúng tôi có y = 3.

Từ những gì chúng tôi đã nói trước đây, phương pháp này có giá trị tại index 2 (y-1) là 4, nhân nó 2 vì vậy chúng tôi có được 8, và gán cho rằng chỉ số 3 (y).

Mảng hiện tại: {1,2,4,8}

+1

giải thích rất hay cho một người mới, giờ đã rõ ràng. cảm ơn rất nhiều – matrix

5

Cho phép bạn lướt qua những điều đầu tiên xảy ra. Bạn bắt đầu với mảng này:

1 2 3 4 

Không có gì ngạc nhiên khi in.

Sau đó, bạn chạy:

x(v, v[2] -1) ... evaluates to 

x(v, 3 - 1) ... evaluates to 

x(v, 2) 

Những thay đổi mảng dựa trên:

array[y] = array[y - 1] * 2; 

Cho phép chèn y như 2 (xem ở trên):

array[2] = array[1] * 2; 

array[2] = 2 * 2; 

dẫn đến:

1, 2, 4, 4 

Vì vậy, câu trả lời thực sự là: bạn thậm chí không cần một trình gỡ lỗi. Một mẩu giấy, một cây bút và một chút suy nghĩ thậm chí còn hiệu quả hơn để khám phá ra "bí mật" ở đây.

1

print luôn in toàn bộ mảng. xy đang thực hiện thay đổi đối với mảng ở giữa.

Hãy nhớ rằng v[x] chỉ là một số nguyên. Ví dụ: v[2] chỉ là 3, vì vậy v[2] - 1 = 2. Do đó, nó sửa đổi v[2] giữa cuộc gọi đầu tiên và thứ hai thành print.

+0

nhiều cảm ơn, tôi nhận được điều này, nhưng [3] ban đầu là 4 và nó in 8 – matrix

+1

@matrix Trên thực tế, [3] được thay đổi thành 8 * giây * thời gian 'x' được gọi. Lần đầu tiên 'x' được gọi,' [2] 'được thay đổi thành' 4'. – EJoshuaS

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