2014-03-19 73 views
0
/* This program converts decimal to binary */ 

import javax.swing.JOptionPane; 

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

    String askForDecimal = JOptionPane.showInputDialog("Enter the decimal number you would like to convert?"); 
    int decimalNumber = Integer.parseInt(askForDecimal); 

    int remainder = 0; 
    for (int i = 1; decimalNumber > 0; i++) { 

      decimalNumber /= 2; 
      remainder = decimalNumber % 2; 
      System.out.print(remainder); 
     } 

    } 
} 

例如我輸入15,但它返回1110應該是1111. p.s.這個結果將從右到左讀取。如何使用for循環將小數轉換爲二進制?

+0

這所學校是否工作?你必須使用for循環嗎? – slugmandrew

+0

我的老師不讓我! – TheJuggler

+0

@slugmandrew是的。是的,我必須! – TheJuggler

回答

3
decimalNumber /= 2; 
remainder = decimalNumber % 2; 

這兩行應該是相反的順序。你能明白爲什麼嗎?

2

根本不需要變量i在for循環中,只需使用while循環即可。

中有你的算法存在缺陷,因爲你是第一次將:

15/2 = 7 
7/2 = 3 
3/2 = 1 
1/2 = 0 

您需要將之前檢查剩餘,而不是事後。

1

如果你理解程序的意圖,你應該看到這個問題,如果你輸出一些中間運作的:

int remainder = 0; 
for (int i = 1; decimalNumber > 0; i++) { 
     System.out.println("Entering for() block"); 
     System.out.println("decimalNumber=" + decimalNumber); 
     decimalNumber /= 2; 
     System.out.println("decimalNumber=" + decimalNumber); 
     remainder = decimalNumber % 2; 
     System.out.println(remainder); 
    } 
} 

檢查這個輸出和錯誤應該成爲明顯的,這是因爲兩條語句是錯誤的,你錯過了decimalNumber的第一個最大的值。

您可能還會注意到remainder未在塊外部使用,因此您無需在塊之外聲明它,也無需將其初始化爲零。

同樣的,你可能會注意到的i值從未使用過,所以你可以改變for循環:

for(;decimalNumber > 0;) 

...這相當於:

while(decimalNumber > 0) 

許多人們習慣於在其代碼中臨時放置println語句進行調試。但這是一個壞習慣。相反,學會盡快使用調試器。使用調試器,您可以暫停程序並逐行瀏覽它,查看所有變量的值。

0

你需要這樣做:

String s = ""; Integer remainder = 0; while(decimalNumber > 0) { remainder = decimalNumber % 2; decimalNumber /= 2; s = remainder.toString() + s; } System.out.println(s);

0

您必須更改代碼以

remainder = decimalNumber % 2; 
decimalNumber /= 2; 

你必須除以2的號碼前得到的餘數。