Как конвертировать массив int в int - PullRequest
0 голосов
/ 04 мая 2019

В настоящее время я начал читать книгу об алогиртах, поэтому сейчас я пытаюсь использовать несколько очень простых алгоритмов, чтобы освоиться с конвертированием и т. Д. В этом небольшом классе я хочу включить функцию добавления в школу с переносом.

Как я могу преобразовать полученный массив Int в массив int?Я не знаю, как преобразовать их адекватно ..

Текущий результат - [7, 8, 3, 7, 9, 0, 5, 6], и я хочу объединить числа в одно целое число (78379056).Какие у меня есть возможности?

public class Addition {

    public int[] addiere(int[] a, int[] b) {
        int res = 0;
        int[] c = new int[a.length];
        for(int i = a.length-1 ; i>=0 ; i--) {
            res = a[i]+b[i];
            if(res>=10) {
                c[i] = oneValue(res);
                a[i-1]+=1;
            } else c[i]=res;
            System.out.println("a -- "+a[i]+"  b -- "+b[i]+"  c -- "+c[i]);
        }
        return c;
    }

    public int oneValue(int t) {
        String res;
        int val;
        res=Integer.toString(t);

        res = res.substring(res.length()-1);
        val = Integer.parseInt(res);

        return val;

    }


    public static void main(String[] args) {

        int[] a = {3,4,6,8,9,1,2,4};
        int[] b = {4,2,5,7,8,9,3,2};

        Addition add = new Addition();
        int[] result;

        //returns an array of Integers
        System.out.println(Arrays.toString(add.addiere(a, b)));

        result = add.addiere(a, b);

        //HERE should be a method to convert the result ( Array of Integers ) just into a normal integer
    }

}

Ответы [ 5 ]

3 голосов
/ 04 мая 2019

Учитывая массив

int arr[] = { 7, 8, 3, 7, 9, 0, 5, 6 };

, вы можете просто сделать:

long num = Long.parseLong(Arrays.stream(arr)
                                .mapToObj(String::valueOf)
                                .collect(Collectors.joining()));

, который выдает

78379056


Объяснение:

  1. В mapToObj(...) мы преобразуем каждый элемент из int в String, используя метод valueOf.
  2. Далее мы собираемкаждая из этих отдельных строк в одну строку с помощью Collectors.joining()
  3. Теперь мы преобразуем эту строку в длинную.Вы можете прочитать больше о потоках из документов здесь

Мы используем здесь long только в случае, если число слишком велико, чтобы содержаться в int .

2 голосов
/ 04 мая 2019

Вы можете либо преобразовать массив в строку и использовать Integer.parseInt(), чтобы получить этот результат, либо использовать простой цикл, складывающий числа, умноженные на 10, с их показателем положения:

int r = 0;
for (int i = 0; i < result.length; i++) {
    r += result[i] * Math.pow(10, result.length - i - 1);
}

Я бы предпочел это решение.

Результат для массива [7, 8, 3, 7, 9, 0, 5, 6] равен 78379056.

Кроме того, вам следует рассмотреть возможность использования long вместо int, если у вас есть числа вне диапазона int (78379056).

Редактировать: Вот решение с Integer.parseInt():

StringBuilder builder = new StringBuilder();
for (int i : result) {
    builder.append(i);
}
int r = Integer.parseInt(builder.toString());

В качестве альтернативы вы можете взглянуть на ответ Николаса К .

1 голос
/ 04 мая 2019
    public static void main(String[] args) {
        int[] a =  {7, 8, 3, 7, 9, 0, 5, 6};


        int m = 1;
        int r = 0;

        for (int i=a.length-1; i>=0; i--) {
            r = a[i] * m + r;
            m = m * 10;
        }

        System.out.println(r);
    }

отпечатков:

78379056
1 голос
/ 04 мая 2019

В конце концов, вы можете умножить каждое число на 10 и сложить их вместе.Например, этот код вернет «1234».

int[] array = {1, 2, 3, 4};
int total = 0;
for(int i = 0; i < array.length; i++)
    if(array[i] > 9 && array[i] < 0)
        throw new IllegalArgumentException("Only use digits");
    else
        total += array[i] * Math.pow(10, array.length - i - 1);
System.out.println(total);

. Он работает во всех случаях, кроме случаев с номером.Убедитесь, что вы обработали ошибку.

(будьте внимательны с Integer.MAX_VALUE)

0 голосов
/ 04 мая 2019

Вы можете использовать BigInteger для хранения числа, которое больше, чем int max size, а также вы можете избежать NumberFormatException.

public static void main(String[] args) {
        int[] ary = {2,1,4,7,4,8,3,6,4,7};

        StringBuilder numBuilder = new StringBuilder();
        for(int num:ary) {
            numBuilder.append(num);
        }
        BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
        BigInteger finalNum = new BigInteger(numBuilder.toString());
        if(finalNum.compareTo(maxInt)>0) {
            //number is more the max size
            System.out.println("number is more than int max size");
        }else {
            int result = finalNum.intValueExact();
            System.out.println(result);
        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...