[英]Decimal to binary assignment in Java
嗨我有一個任務,我必須轉換變量'二進制'(這是一個隨機二進制(例如11001))並打印它。
這很難,因為Java中沒有內置功能
示例:1010 = 1 * 2 ^ 3 + 0 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 0 = 8 + 0 + 2 + 0 = 10
我的代碼出了什么問題?
int a = 1;
int b = 0;
for (int i=binary.length()-1;i>0;i--){
if (binary.charAt(binary.length()-1) == '1'){
b += 1;
if (binary.charAt(i) == '1'){
for (int j=binary.length()-1;j>0;i--){
a = a*2;
}
}
}
}
System.out.println(a+b);
目前它只打印“1”
實際上在Integer
有一個靜態方法, parseInt(String s, int radix)
可以解決你的問題:
String binary = "11001010110";
int result = Integer.parseInt(binary, 2);
您正在迭代從最低有效數字到最高有效數字的字符(盡管您正在跳過最重要的數字),但由於某種原因,您始終檢查最后一個字符是否為“1”而不是檢查當前字符。
在循環中使用類似的代碼,我建議:
int result = 0;
int a = 1;
for (int i = binary.length() - 1; i >= 0; i--) {
if (binary.charAt(i) == '1') {
result += a; // this adds 2^k to the result for each '1' digit, since a is initialized
// to 2^0 and is multiplied by 2 in each iteration
}
a *= 2;
}
例如,如果binary
初始化為“10010011”,則result
為147
。
您的代碼嘗試使用for循環計算2的每個冪,盡管Java中有更簡單的方法,但這是可以的。
按照您的標准,您可以這樣做:
String binary = "111011";
int sum = 0;
for (int i = binary.length() - 1; i >= 0 ; i--){
if (binary.charAt(i) == '1'){
int a = 1;
for (int j = 1; j < binary.length() - i; j++) {
a *= 2;
}
sum += a;
}
}
System.out.println(sum);
它打印59
。
您的代碼中出錯的是條件i > 0
,
它應該是i >= 0
否則你會失去字符串的第一個字符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.