2017-01-29 74 views
0

下面是主題謎題的解決方案和輸出,我無法理解它是如何工作的。頭第一個Java拼圖4(第四章,第91頁)解釋

public class Puzzle4 { 
    public static void main(String[] args) { 

    Puzzle4b[] obs = new Puzzle4b[6]; 
    int y = 1; 
    int x = 0; 
    int result = 0; 

    while (x<6) { 
     obs[x] = new Puzzle4b(); 
     obs[x].ivar = y; 
     y = y*10; 
     x = x+1; 
    } 

    x = 6; 

    while (x>0) { 
     x = x-1; 
     result = result + obs[x].doStuff(x); 
    } 

    System.out.println("result " + result); 
    } 
    } 

    class Puzzle4b { 

    int ivar; 

    public int doStuff(int factor) { 

    if (ivar>100) { 
     return ivar*factor; 
     } else { 
     return ivar*(5-factor); 
    } 
    } 
    } 

輸出:

result 543345 

從我的理解,第一While循環將通過6次運行(從X == 0到x == 5)。 y變量反過來是'ivar',它的值爲1,000,000(我認爲這是我出錯的地方,但我會繼續希望被糾正)。

第二個While循環對我來說有點困惑。它將運行6次,循環的第二行將'x'值傳遞給doStuff方法,以便它返回一個值。我想出來的數字與實際結果不符。

任何幫助在這裏將不勝感激。如果我以錯誤的方式思考,請告訴我。如果有人想重新格式化我的代碼以更加緊密地與行業標準保持一致,那麼從一開始就學習好的習慣會很好!

+3

如果你先解釋這個謎題,這將有所幫助。 – shmosel

+1

您是否在調試器中逐行執行一行代碼?如果不是,那就是開始的地方。然後,當你確定它的行爲不符合你的期望的確切位置時,如果你仍然有問題,請編輯你的文章,幷包括你不明白的細節。 –

+0

1.這只是一個練習,要求讀者用一堆可能的代碼填充一些空白。不是一個謎題。 – Boris

回答

1

這段代碼`

obs[x].ivar = y; 
     y = y*10; 

將導致第一的ivar = Y = 1,則多ý 因此這將是{1 - 10 - 100 - 1000 - 10,000 - 100,000}

第二個循環x將會是{5,4,3,2,1,0} 所以它會像這樣開始= result + obs [5] .doStuff [5];

我想所有在元素X的誤解1將等於Y在元件5 和在元件2 x將等於Y在元件4等「,是因爲x被遞增和y被遞減

所以它會是這樣的

(ivar > 100) 
    ivar * (5-factor) 
    x[3] * y[2] = 1000 * (5-2) = 3000 
    x[4] * y[1] = 10000 * (5-1) = 40000 
    x[5] * y [0] = 100000 * (5-0) = 500000 

then (ivar < 100) 
    ivar * factor 
x[1] * y [5] = 1 * 5 = 5 
x[2] * y [4] = 10 * 4 = 40 
x[3] * y [3] = 100 * 3= 300 

然後如果你添加所有的數字加在一起你就會有你的輸出

0

對我來說,一個簡單的方法來打破這是通過加強和準確地看到其中的值都來自。 一世'我已經完成了下面的內容,並將其評論到代碼中。

public class Puzzle4 { 
    public static void main(String[] args) { 

    Puzzle4b[] obs = new Puzzle4b[6]; 
    int y = 1; 
    int x = 0; 
    int result = 0; 

    // let's break out of the loops 
    obs[0] = new Puzzle4b(); 
    obs[0].ivar = 1; 
    obs[1] = new Puzzle4b(); 
    obs[1].ivar = 10; 
    obs[2] = new Puzzle4b(); 
    obs[2].ivar = 100; 
    obs[3] = new Puzzle4b(); 
    obs[3].ivar = 1000; 
    obs[4] = new Puzzle4b(); 
    obs[4].ivar = 10000; 
    obs[5] = new Puzzle4b(); 
    obs[5].ivar = 100000; 
    // ivar's = 1, 10, 100, 1000, 10000, 100000 

    result = result + obs[5].doStuff(5); // 0 + (5 * 100000) 
    result = result + obs[4].doStuff(4); // 500000 + (4 * 10000) 
    result = result + obs[3].doStuff(3); // 540000 + (3 * 1000) 
    result = result + obs[2].doStuff(2); // 543000 + ((5 - 2) * 100) 
    result = result + obs[1].doStuff(1); // 543300 + ((5-1) * 10) 
    result = result + obs[0].doStuff(0); // 543340 + ((5-0) * 1) 
    // result = 543345 
    } 

    System.out.println("result " + result); 
    } 
    } 

    class Puzzle4b { 

    int ivar; 

    public int doStuff(int factor) { 

    if (ivar>100) { 
     return ivar*factor; 
     } else { 
     return ivar*(5-factor); 
    } 
    } 
    } 

希望這有助於你理解這個例子。

相關問題