2010-12-19 34 views
0

您好我給這個下面的程序通過噪聲值參數的值:不知道如何到達使用經過

http://euclid.cs.qc.cuny.edu/13-page-handout.pdf

第一頁

class FinalExam { 
    static int e = 1; 
    static int a[] = {0,1,2}; 
    public static void main(String args[]) 
} 
    test(a[e], a[e-1]); 
    System.out.println(a[0] + " " + a[1] 
        + " " + a[2] + " " + e); 
{ 
    static void test (int x, int y) 
} 
    a[1] = 6; 
    e = 2; 
    x += 3; 
    y--; 
    System.out.print(x + " " + y + " "); 
{ 
{ 

類FinalExam上例2

答案關鍵字的輸出爲: 每個參數傳遞模式的輸出: x ya [0] a [1] a [2] e

傳遞給名稱:x = 5 y = 5 a [0] = 0 a [1] = 5 a [2] = 5 e = 2

你能告訴我他們如何到達答案嗎?我不明白從哪裏來的東西5來自

+0

請在您的問題中顯示相關的代碼片段。儘管他們在考試開始時提到了C++,但這個代碼是Java。 – birryree 2010-12-19 19:03:46

回答

2

看着你的講義,我猜你正在學習編程語言可以實現的各種評估策略(按值調用,按引用調用,按名稱,等等......)。 #2的代碼片段在java中,但它們要求您評估輸出AS,如果使用了給定的評估策略,而不是以多種語言提供代碼片段。

在Java中,只有按值調用,所以此java程序的輸出將與它們的標記爲call-by-value(4 -1 0 6 2 2)的答案相匹配。

關於call-by-name的回答:函數的參數實際上被替換到函數中,並且每次使用時都會重新評估。

之前test(a[e], a[e-1])e = 1, a = {0, 1, 2}

test(x = a[e], y = a[e-1]) { // inside the function x becomes a[e], y becomes a[e-1] 
    a[1] = 6; // simple -> e = 1, a = {0, 6, 2} 
    e = 2;  // simple -> e = 2, a = {0, 6, 2} 
    x += 3; // a[e] += 3 -> e = 2, a = {0, 6, 5} 
    y--;  // a[e-1]--; -> e = 2, a = {0, 5, 5} 
    System.out.print(x + " " + y + " "); // print(a[e] ... a[e-1]) -> 5, 5 

test(a[e], a[e-1])e = 2, a = {0, 5, 5}

System.out.println(a[0] + " " + a[1] + " " + a[2] + " " + e); // 0, 5, 5, 2 

最終輸出:5,5,0,5,5,2

他們沒有問什麼這個java程序會輸出,但是使用call-by-name的類似程序會輸出。

+0

+1很好解釋。 – prasopes 2010-12-19 19:57:19