所以我的老师让我们使用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,依此类推。非常感谢帮助。
答案 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