[英]How to convert a decimal to binary using for loops?
/* 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。ps,將從右到左讀取結果。
decimalNumber /= 2;
remainder = decimalNumber % 2;
這兩行的順序應相反。 你知道為什么嗎?
您根本不需要for循環中的變量i,只需使用while循環即可。
您的算法存在缺陷,因為您先進行除法:
15 / 2 = 7
7 / 2 = 3
3 / 2 = 1
1 / 2 = 0
您需要先檢查余數,然后再除法。
如果您了解程序的意圖,則在輸出一些中間工作原理時應該會看到問題:
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);
}
}
檢查此輸出,錯誤應該變得很明顯,這是因為由於兩個語句的處理方式錯誤,因此您缺少第一個最大的十進制數值。
您可能還會注意到, remainder
未在塊外部使用,因此您無需在塊外部聲明它,也無需將其初始化為零。
同樣,您可能會注意到從未使用過i
的值,因此您可以將for循環更改為:
for(;decimalNumber > 0;)
...相當於:
while(decimalNumber > 0)
許多人養成了在代碼中放置臨時println
語句進行調試的習慣。 但是,這是個壞習慣。 相反,請盡快學習使用調試器 。 使用調試器,您可以暫停程序並逐行瀏覽程序,查看所有變量更改時的值。
您需要這樣做:
String s = ""; Integer remainder = 0; while(decimalNumber > 0) { remainder = decimalNumber % 2; decimalNumber /= 2; s = remainder.toString() + s; } System.out.println(s);
您必須將代碼更改為
remainder = decimalNumber % 2;
decimalNumber /= 2;
您必須先將余數除以2。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.