基本转换器不工作java

时间:2013-09-06 03:12:19

标签: java binary converter base

好的,所以我现在只想尝试将基数转换为基数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;
}

1 个答案:

答案 0 :(得分:0)

我只能假设发生这种情况是因为result似乎是static变量,您没有在每个方法调用上重新分配/清除/重新初始化,因此仍保留以前的值,您在之前的电话中添加了sum

将其置于方法的本地

public static String convert(String input, int base_in, int base_out){
    List<Integer> result = new LinkedList<>();
    ...

或者在开始时重新初始化(以清除之前的总和)

public static String convert(String input, int base_in, int base_out){
    result = new LinkedList<>(); // or just call clear()
    ...

证明:0000 + 0001 + 0010 = 000000010010 = 18