Java在不使用数学pow的情况下将字符串二进制转换为整数



Main:

public class Main{                                      
public static void main(String[] args){                                       
System.out.println(Convert.BtoI("101101010101"));                                   
System.out.println(Convert.BtoI("1011110"));                                                                            
}                                     
}

Sub:

public class Convert{                                       
public static int BtoI(String value){                                     
int no = 0;                                                                         
for(int i=value.length()-1;i>=0;i--){                                       
if(value.charAt(i)=='1')                                      
no += (???) ;                                       
++;                                       
}                                       
return no;                                      
}                                     
}

我如何在不使用maths.pow的情况下将字符串二进制转换为整数,只使用+-*和/,我是否应该实现另一个for循环,因为它是int j = 1;i <= example; i*=2){?。我很困惑,想在不使用maths.pow或任何类似代码的情况下学习。

从字符串的开头到结尾,您只需将每个字符的幂相乘,然后将总数相加,即可得出基本的十个值:

public static int binaryToInt(String binaryNum) {
int pow = 1;
int total = 0;
for (int i = binaryNum.length(); i > 0; i--) {
if (binaryNum.charAt(i-1) == '1')  {
total += pow;
}
pow *= 2;
}
return total;
}

但我认为这更优雅:

String binaryNum = "1001";
int decimalValue = Integer.parseInt(binaryNum, 2);

Integer.parseInt(yourString,2);怎么样??2表示您正在解析基数为2的数字。

从您的代码开始+一些重要的样式更改:

public class Convert {                                       
public static int binaryToInt(String value) {                                     
int no = 0;                                                                         
for (int i = 0; i < value.length() - 1; i++) {
no = no * 2;             // or no *= 2;                                  
if (value.charAt(i) == '1') {                                     
no = no + 1;         // or no++                                    
}                                       
}                                       
return no;                                      
}                                     
}

我添加的代码的含义应该是不言自明的。如果没有,我鼓励你把它的作用作为练习。(如果你不确定,用铅笔和纸"手工执行"…(

风格变化(大致按重要性排序(为:

  1. 方法名称不要以大写字符开头
  2. 使用驼色案例
  3. 避免使用可爱/晦涩/不必要的缩写。下一个阅读你代码的人不应该使用魔术解码器环来理解你的方法名称
  4. 在操作员周围留出空间
  5. 4个字符的缩进
  6. ){之间以及关键字之前/之后加空格
  7. if语句的"then"one_answers"else"部分周围使用花括号,即使它们不是严格必要的。(这是为了避免出现缩进错误导致您误读代码的问题。(

相关内容

最新更新