Случайное отрицательное число при преобразовании чисел из строки в int в Java - PullRequest
0 голосов
/ 01 ноября 2019

Попытка преобразовать строку чисел в двоичную с помощью этого кода

public static int convert(String text)
{
    int num =0;
        for(int i =0; i<text.length();i++)
        {
            if(((int)text.charAt(i)>=48)&&((int)text.charAt(i)<=59))
            {
                System.out.println("Before: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
                num = num*10 + ((int)text.charAt(i)-48);
                System.out.println("After: i = " + i + " num = "+ num+" char = "+ text.charAt(i) + "numchar = " + ((int)text.charAt(i)-48));
            }

        }
        return num;
    }
}

Однако, как только он достигнет своего 10-го числа, вывод становится полным беспорядком с отрицательными числами и случайными числами, даже когда мои тестовые строки являются двоичными,Есть идеи, почему это может происходить?

1 Ответ

1 голос
/ 01 ноября 2019

Тип данных int в Java представляет собой 32-разрядное целое число со знаком, поэтому максимальное значение, которое он может представлять, составляет 2 ^ 31 - 1 = 2147483647. Поскольку вы пытаетесь проанализировать числа, большие этого, ваша арифметика приведет к целочисленное переполнение .

Для решения этой проблемы вам потребуется использовать тип данных, который может представлять большие целые числа, например long (до 19 цифр) или BigInteger (произвольно большой).

...