好的,所以我现在只尝试将基数转换为基数 10,因此请忽略 base_out。靠近底部的 while 语句是有问题的。我的 jUnitTest 是这样的:
@Test
public void test() {
Assert.assertEquals("0", NumberBase.convert("0000", 2, 10));
Assert.assertEquals("1", NumberBase.convert("0001", 2, 10));
Assert.assertEquals("2", NumberBase.convert("0010", 2, 10));
Assert.assertEquals("3", NumberBase.convert("0011", 2, 10));
Assert.assertEquals("4", NumberBase.convert("0100", 2, 10));
Assert.assertEquals("5", NumberBase.convert("0101", 2, 10));
Assert.assertEquals("6", NumberBase.convert("0110", 2, 10));
Assert.assertEquals("7", NumberBase.convert("0111", 2, 10));
Assert.assertEquals("8", NumberBase.convert("1000", 2, 10));
它不断为我提供第三次测试的输出 18,而我期望为 2。我已经查看了一段时间,无法弄清楚出了什么问题。
public static String convert(String input, int base_in, int base_out){
String str = "";
for (int index = 0; index < input.length(); index++) {
char aChar = input.charAt(index);
sum = Character.getNumericValue(aChar);
result.add(sum);
}
i = 0;
sum = 0;
while(i < result.size()){
sum += (int) (result.get(result.size()-1-i))*(Math.pow(base_in, i));
i++;
}
str = "" + sum;
return str;
}