0

わかりましたので、今は基数を基数 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));

2 を期待している 3 番目のテストの出力 18 が表示され続けます。これをしばらく調べていて、何が問題なのかわかりません。

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;
}
4

1 に答える 1

0

各メソッド呼び出しで再割り当て/クリア/再初期化していない変数resultのように見えるため、以前の呼び出しで追加した以前の値を保持しているため、これが発生すると想定できます。staticsum

メソッドに対してローカルにするか

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

于 2013-09-06T03:20:02.820 に答える