For Loop将Base 2 Number转换为Base 10?

时间:2014-01-16 20:20:17

标签: loops for-loop base

所以我的老师让我们使用for循环,我们的任务之一就是创建一个for循环,将任何基数2的数字改为基数10.我将发布到目前为止我所做的事情。我只是在AP计算机科学中代码看起来很业余。

    public long getBaseTen( )
{
    long ten=0;
    for (int i = 0; i < binary.length()-1; i++)
    {
        if (binary.charAt(binary.length()-i-1) == '0');
            ten += 0;
        if (binary.charAt(binary.length()-i-1) == '1');
            ten += Math.pow(2, i);
    }
    return ten;
}

binary是一个字符串变量,包含用户先前指定的基数2。我需要将这个base 2字符串转换为base 10并将该数字存储到long 10中。现在每当我调用这个方法时,我总是得到相同的数字,具体取决于字符串的长度。如果字符串是2个字母长,它将始终返回1,如果它是3个字母长,它将始终返回3,如果它是4个字母长,它将始终返回7,依此类推。非常感谢帮助。

4 个答案:

答案 0 :(得分:3)

您的代码中的问题是您的if语句提前关闭:

if (binary.charAt(binary.length()-i-1) == '0');
           ten += 0;

应该是

if (binary.charAt(binary.length()-i-1) == '0'){
           ten += 0;
}

当然,还有其他一些事情可以采取不同的方式,但你会在整个过程中弄明白。

答案 1 :(得分:0)

删除“if”行末尾的分号。他们不应该在那里;他们被解释为

 if(whatever)
     ; // null statement -- do nothing

(你也可以在if控制的代码块周围添加大括号,但是当你只是试图控制一个语句时,这是可选的。有些人总是使用大括号,但这个决定很大程度上是一个问题。编码风格。)

答案 2 :(得分:0)

0和1的字符串遵循两个规则的幂。最右边的值是2 ^ 0然后2 ^ 1 2 ^ 2等等,每次指数加倍。知道了这一点,你就可以轻松进行转换。

例如:

 int tens;
 for(int i=1;i<binary.length()-1; i++){
    tens += Math.pow(2,binary.length-i);
 }

例如,如果二进制数是0101,我们知道这是5.我们将从binary.length()开始,这将是3,完美,因为最右边的值0由2 ^ 3表示。第二个数字1由2 ^ 2表示,如果您注意到binary.length() - 此时我是2.

如果你按照逻辑这应该工作,可能需要一个小的语法修复。

答案 3 :(得分:0)

您不需要使用一个if语句,您可以使用此

public long getBaseTen()
{
    long ten=0;
    for (int i = 0; i < binary.length(); i++)
    {
        if (binary.charAt(i) == '1')
            ten += Math.pow(2,  binary.length()-i-1);
    }
    return ten;
}

注意,i < binary.length()-1也是错误的。

您可以在此处查看其工作原理http://ideone.com/swzitQ