簡體   English   中英

無法將十進制值轉換為二進制值

[英]Trouble converting decimal value to binary

我正在制作一個將十進制值轉換為二進制值的程序,反之亦然。 我已經想出了如何將二進制轉換為十進制,但是我在將十進制轉換為二進制時遇到了問題。 我看過很多源代碼,其中包含有關如何執行此操作的代碼,但其中大多數都涉及使用數組。 我不能使用數組,因為這個程序有一個 GUI,而 JLabel 不能打印數組。 我找到了一種代碼,適用於某些數字,但不適用於其他數字。 這是代碼:

public void convertBinary (int decimal)
    {
        String binary = "";
        int remainder;
        
        while (decimal != 0)
        {
            remainder = decimal % 2;
            decimal /= 2;
            binary += remainder;
        }
        lblDecBinAns.setText(String.valueOf(binary));
                
        
    }

給定的數字由用戶輸入(“十進制”),當他們按下按鈕時將被獲取。 我不知道是否可以對此代碼進行調整以使其正常工作。 也許有一種完全不同的算法適用於此,或者可能有一種使用 JLabel 打印數組的方法。 我已經為此困惑了一段時間,所以感謝您的幫助。 謝謝。

PS我知道 .toBinary function,但我必須為此創建自己的方法。

你完成了,你唯一缺少的是反轉binary字符串

int decimal=10;
    String binary = "";
    int remainder;

    while (decimal != 0)
    {
        remainder = decimal % 2;
        decimal /= 2;
        binary += remainder;
    }
    System.out.println(new StringBuilder(binary).reverse().toString());

產量

結果1010

您需要將remainder添加為binary = remainder + binary或反轉字符串。 並且不需要使用String.valueOf因為它已經是一個字符串。 還要考慮decimal為零的情況,您需要發送0

  public String convertBinary(int decimal) {
    String binary = "";
    int remainder;
    if(decimal == 0) {
      return "0";
    }
    while (decimal != 0) {
      remainder = decimal % 2;
      decimal /= 2;
      binary = remainder + binary;
    }
    return binary;
  }

對於不同的扭曲,你也可以這樣做。

  • 將結果初始化為空字符串。
  • 使用 AND &運算符,屏蔽掉低位。 您也可以在這里使用余數%運算符。
  • 將位 1 或 0 轉換為字符串並將其添加到結果字符串之前。
  • 將數字( decimal )右移一位,以便檢查下一位。
    while(!(decimal>>>1) == 0)
  • 繼續 while 循環直到decimal == 0 (即所有1位都已移出數字)。
public static String toBinary(int decimal) {
    // intialize the string
    String binary = Integer.toString(decimal&1);
    while ((decimal>>>=1) != 0) {
        binary  =  Integer.toString(decimal&1)+ binary;
        // or binary = Integer.toString(decimal % 2) + binary;
    }
    return binary;
}

你試過這個嗎?

String test = Integer.toString(n, 2); //n is the number to convert and 2 the base (binary). In case you want an octal number, for example, just change the base to 8.

但是如果你想像這樣將該String重新轉換為數字,使用它會導致問題:

int number = Integer.parseInt(test); //This will cause NumberFormatException.

為避免錯誤,必須將test的每個字符轉換為一個char

char digit = test.charAt(i);

最后,再次將每個字符轉換為單獨的String

String converted = String.valueof(digit);

現在您可以將新的String轉換為int

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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