Почему StringBuffer возвращает ссылку? - PullRequest
0 голосов
/ 22 февраля 2019
public class doubleSum {

    private static String calculate(String a, String b){
        String[] a_parts = a.split("\\.");
        String[] b_parts = b.split("\\.");

        StringBuffer sb = new StringBuffer();

        int[] carrier = new int[]{0};
        cal(a_parts[1],b_parts[1],sb, carrier);
        sb.append(".");

        cal(a_parts[0],b_parts[0],sb, carrier);
        if(carrier[0] > 0)
            sb.append(carrier);
        return sb.reverse().toString();
    }
    private static void cal(String a, String b, StringBuffer sb, int[] carrier) {
        int i = a.length() - 1;
        int j = b.length() - 1;
        while(i >= 0 || j >= 0) {
            int sum = carrier[0];
            if(i >= 0) {
                sum += a.charAt(i) - '0';
                i--;
            }
            if(j >= 0) {
                sum += b.charAt(j) - '0';
                j--;
            }

            carrier[0] = sum / 10;
            sb.append(sum%10);
        }
    }
    public static void main(String args[]) {
        String res = calculate("6.91992", "4.10");
        System.out.println(res);
    }
}

Я пытался добавить два числа с десятичной точкой.Однако, когда я распечатывал, это было 6660f926 @ I [0.92002, что-то связанное со ссылкой.

Кто-нибудь знает, как это исправить?

1 Ответ

0 голосов
/ 22 февраля 2019

В вашем коде есть опечатка.Вы добавили сам массив, а не нужный элемент массива, поэтому вы создали строку, которая буквально содержит хеш-код вашего carrier массива.

Строка:

sb.append(carrier);

должно быть:

sb.append(carrier[0]);

Просто к вашему сведению, то, что вы считаете ссылкой, на самом деле является хеш-кодом значения поля carrier.

...