我正在尝试创建一个将二进制数转换为基数为10的int方法。我认为我的循环结构正确,但我无法弄清楚如何将索引位置与指数相关联。基本上如果字符串中有一个'1',我想将它返回为2,无论该char的索引位置是什么。此外,这将要求我反转索引(以便0位置是字符串最右边的字符。这是我到目前为止:
public static int BinaryToNumber(String numberInput)
{
int len = numberInput.length();
for(int i=len-1; i<len; i--)
{
if(i == '1');
{
return n;
}
}
return 0;
}
提前谢谢!
答案 0 :(得分:0)
我希望在可能的情况下使用Java内置例程 - 正如我在评论Integer.parseInt(numberInput, 2);
中所说的那样。按照惯例,Java方法名称以小写字母开头。最后,您可以修复代码(我添加了一个小测试工具),例如
public static int binaryToNumber(String numberInput) {
if (numberInput == null) {
return 0;
}
int ret = 0;
char[] ni = numberInput.trim().toCharArray();
for (int i = 0; i < ni.length; i++) {
if (ni[i] == '1') {
// This is 2 ^ (n) where (n) is based on the position from the right.
ret += 1 << ni.length - i - 1;
}
}
return ret;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
String t = Integer.toBinaryString(i);
System.out.printf("%s = %d%n", t, binaryToNumber(t));
}
}
答案 1 :(得分:0)
这是我对问题的实施
public static void main(String[] args) {
String str = "100101";
System.out.println(toDecimal(str));
}
private static int toDecimal(String binary) {
int result = 0;
for(int i = 0; i < binary.length(); i++) {
int a = (int) binary.charAt(i) - 48;
double secondPart = 1 << (binary.length()-1) - i;
result += a * secondPart;
}
return result;
}
我希望有所帮助 萨拉姆