2014-11-08 123 views
1
int a= IO.readInt(); 
int b = IO.readInt(); 
int z = 0; 
int i; 
for(i =0; z<=b; i++) { 
    z=z+a; 
} 

System.out.println(i); 

a。)給出以下輸入,代碼的實際輸出是什麼? 輸入:a讀入20,b讀入75.循環,麻煩理解循環請幫助初學者

b)。這個代碼類似於什麼數學運算。

c。這個代碼正確實現了你在(b)中確定的操作嗎?如果可以的話提供一些測試用例來證明這一點如果沒有,請修復代碼中的錯誤。 `

好吧,讓我的教授回過頭來看,我想知道你們中的任何一個人是否可以解釋這段代碼中究竟發生了什麼。我得到了一個。)是4,但不明白它是怎麼樣的4.對於數學運算,代碼是否類似於我= +加法,那不是接近答案的地方。我需要更好的理解循環,你的幫助將非常感激。

+0

所以你想獲得有關for循環的一些信息?或一般循環?一個好的起點是[Java文檔:for語句](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html)。 – mattias 2014-11-09 00:02:38

+1

嗨羅伯特,你介意編輯你的問題,告訴我們你的推理是什麼,你將如何回答每個問題?一般來說,我們不喜歡做別人的功課,但我相信你可以得到關於你可能做錯什麼的澄清反饋。如果你完全陷入困境,試着考慮一下這個功能如何隨着時間的推移而改變。從時間零點到程序結束的流程是什麼?記下每個變量的變化情況,即循環的每次迭代中它們的值是多少?如何測試('z <= b')? – par 2014-11-09 00:04:51

+0

那麼如果'b'的答案是'addition''不應該輸出'95'而不是'4'? – Tom 2014-11-09 00:07:52

回答

0

輸出是循環繼續的次數,直到z> b。每做一次簡單的z + a添加,你應該明白它是如何執行的

0

好的,這裏是我可以給循環的最好的解釋,以及你的代碼中發生了什麼。

首先,要對循環有三個部分。其中,initializerexpressionincrementor,像這樣:

for (initializer; expression; incrementor) 

你的初始化,只要你的初始化INT i 0它做它z小於或等於b(z <= b),並且每次執行它時,它將i加1;

您循環將第一個輸入添加到z,直到它不再低於b。第一次運行它時,它將z和1加到i。然後它返回到循環的開始,並檢查表達式。

因爲z仍然小於75,它會再次運行。這使得z = 40和i = 2。同樣,z小於75,所以它再次運行。這一次,z是60,而i是3;但60仍然不到75.

我想你可以看到這是怎麼回事。這帶來了最後的迭代。它又增加了20個到z,另有1個到i。現在z = 80和i = 4.它會檢查上一次循環的表達式。由於z大於75,循環終止。這使得i爲4的值,而這正是你越來越作爲輸出

+0

因此,循環運行無限次,直到它達到4? – Robert 2014-11-10 20:46:44

+0

不,它會一直運行,直到表達式返回false,在這種情況下,當'z'大於'75'時。如果'b'改爲'95',而'a'保持不變,'i'將會是'5' – Shadow 2014-11-11 00:11:52

0

首先,我將解釋如何for循環的作品,然後我會回答你的問題:

for(initialization of variables; condition-testing; increment variables) { 
    statements; 
} 

初始化變量是您經常初始化計數器的地方。在你的情況下,變量i設置爲0,i =0

條件測試你測試一個條件是否爲真,如果它是真的for循環中的代碼正在執行。您的情況是:z < = z + a。如果這不成立不要將您的for循環中執行代碼,並跳到右邊的for循環,這是你的情況System.out.println(i)

後最後,術後!一次迭代increment variables部分被更新。我的意思是一次迭代是for循環的主體從開始到結束執行。在你的情況下,這是z=z+a。我不能強調在一次迭代之後增量會發生。在你的情況下,i++被執行,這意味着變量i遞增1。 i ++與i = i + 1相同。i + 1的舊值。

現在回答您的問題。 a)我將逐步解釋發生的事情,並用粗體標出最終答案。

  1. i初始化爲0,i=0
  2. z<=b被首次測試,現在Z = 0和b = 75以使條件z<=b認爲for循環正在執行中的語句..
  3. z=z+a正在執行的和因爲。等號=的右側總是先評估,然後分配到=符號的左側。換句話說:z=z+a將看起來像這樣z = 0 + 20和新值z = 20
  4. 這是第一次迭代,現在終於i遞增。 i++i的值現在是1i = 1
  5. z<=b第二次測試z = 20正如我們在步驟3和b = 75中看到的,所以條件20<=75爲真,並執行for循環內的語句。
  6. z=z+a,Z = 20 + 20,用於Z的新值變爲40 z = 40
  7. 這是第二次迭代中,i再次由一個i++遞增,現在i2i = 2
  8. z<=b第三次評估。 z = 40和b = 75,所以條件成立並且循環正在執行。
  9. Z = Z + A,Z = 40 + 20,用於Z的新值變爲60。z = 60
  10. i由1.我遞增變爲3。i = 3
  11. Ž< = B是用於對第四測試時間,z = 60和b = 75,所以條件成立並執行for循環內的語句。
  12. Z = Z + A,Z = 60 + 20,用於Z的新值變爲80。z = 80
  13. i ++在遞增,i變爲4 i = 4
  14. Ž< = B是用於第5次測試, z = 80和b = 75,這時z不再小於或等於b。 80不等於或小於75.所以for循環中的語句不會被執行。因爲我的增量只發生後,在身體的最後一條語句執行成功,我仍然在4

for循環,所以現在正在執行System.out.println(i)後的代碼繼續。這會打印出i的值,正如你所看到的,我的值在循環中增加到了4。這是打印的價值。

b/c)我並沒有完全明白數學運算的意義,但代碼的作用相同:舍入75/20。

爲了得到一個for循環有很好的理解你也許可以看看這個簡單的例子:

for(int i = 0; i<2; i++){ 
System.out.println(i); 
} 

你會看到,這個程序的輸出將是:

1 
2 

這是因爲它從零開始並在條件i < 2不再爲真時停止。作爲一個方便的技巧,你可以記住這裏的數字number應該是for循環中的迭代次數。 (如果我還初始化爲0並加1,你會經常看到)。

+0

所以我只在Z <= b時打印,而我的問題是數學表達是除數操作。我不完全理解此時正在發生的操作,我知道每當它是真實的時候我都會增加,我看到的是當我增加時,Z的值增加20。 – Robert 2014-11-10 20:54:46