簡體   English   中英

如何使用for循環將小數轉換為二進制?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM