[英]How does this While loop exit ? (java)
我試圖弄清楚該程序是如何工作的,但我陷入了While循環,我不明白第二個循環是如何退出的,因為v
永遠不會等於0或負數。 因為這是退出循環的唯一條件,還是我想念更深的東西? 該代碼將整數(> 0)轉換為二進制。
public class Binary {
public static void main(String[] args) {
// read in the command-line argument
int n = Integer.parseInt(args[0]);
// set v to the largest power of two that is <= n
int v = 1;
while (v <= n/2) {
v = v * 2;
}
// check for presence of powers of 2 in n, from largest to smallest
while (v > 0) {
// v is not present in n
if (n < v) {
System.out.print(0);
}
// v is present in n, so remove v from n
else {
System.out.print(1);
n = n - v;
}
// next smallest power of 2
v = v / 2;
}
System.out.println();
}
}
v是一個int,在Java 1/2中,一個int給出0。您的循環經過2的所有冪,因此將達到1,然后為0。
在調試器中運行它以查看!
想開始
n = 10
所以
v = 8
系統將打印
1010
和迭代是:
1-10> 8 else語句,因此打印1並:n = 2,v = 4
2-2 <4 if語句,因此打印0並:v = 2
3-2 = 2 else語句,因此打印1並:n = 0,v = 1
4-0 <1 if語句因此輸出0且:n = 0,v = 1/2即0為整數
在下一次while條件迭代期間,不再滿足條件,代碼結束。
我認為您在理解整數部分時遇到問題。 在整數除法中, 3/2
不等於1.5
,而是1
。 因此類似地1/2
並不等於0.5
而是0
。 由於變量v
是整數,因此除以整數2
始終是整數除法。 因此,變量v
最終將達到0
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.