Джава; int [] к int - PullRequest
       1

Джава; int [] к int

0 голосов
/ 24 августа 2011

Как бы я преобразовал массив целых чисел в целое число, но особым образом?

Например, как мне преобразовать {1, 9, 9, 0} в 1990?

Ответы [ 7 ]

17 голосов
/ 24 августа 2011

Это будет работать для целочисленного массива любого размера

int nums[] = { 1, 9, 9, 0 };

StringBuilder strNum = new StringBuilder();

for (int num : nums) 
{
     strNum.append(num);
}
int finalInt = Integer.parseInt(strNum.toString());
System.out.println(finalInt);
6 голосов
/ 24 августа 2011
int[] array = {1,9,9,0};
int result = 0;
for(int i = 0; i < array.length; i++) result += Math.pow(10,i) * array[array.length - i - 1];
System.out.println(result);
Output: 1990
2 голосов
/ 24 августа 2017

Обидно видеть неоправданно сложные решения, включающие Math.pow, String и т. Д. Даже библиотеки регулярных выражений и сторонние библиотеки появляются!

Все, что вам нужно, это цикл и умножение на 10:

int num = 0;
for (int a : arr) {
  num = 10*num + a;
}

Это, конечно, предполагает, что элементы arr находятся в диапазоне 0-9; но тогда правильное поведение вне этого случая все равно не определено.

Также предполагается, что цифры массива могут быть преобразованы в целое число без переполнения; но поскольку вопрос касается преобразования в целое число, поведение переполнения также не определено.


Обратите внимание, что вы можете обработать регистр "element> 9" аналогично решению для конкатенации строк , посчитав, сколько цифр нужно сдвинуть num на:

int num = 0;
for (int a : arr) {
  if (a < 0) throw new IllegalArgumentException();
  int i = a;
  do {
    num *= 10;
    i /= 10;
  } while (i != 0);
  num += a;
}

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

1 голос
/ 24 августа 2011

Предполагая, что у вас есть цифры в Integer[] вместо примитива int[] и Commons Lang Library , вы можете найти следующую строку полезной

    Integer[] array = {1, 9, 9, 0 };
    System.out.println(Integer.valueOf(StringUtils.join(array)));

Или, если целое число слишком велико, чтобы поместиться в int, используйте BigInteger

    Integer[] piDigits = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9, 3, 2,
            3, 8, 4, 6, 2, 6, 4, 3, 3, 8, 3, 2, 7, 9, 5, 0, 2, 8, 8, 4, 1,
            9, 7, 1, 6, 9, 3, 9, 9, 3, 7, 5, 1, 0, 5, 8, 2, 0, 9, 7, 4, 9,
            4, 4, 5, 9, 2, 3, 0, 7, 8, 1, 6, 4, 0, 6, 2, 8, 6 };
    System.out.println(new BigInteger(StringUtils.join(piDigits)));
1 голос
/ 24 августа 2011

Я не уверен в Java, но в псевдо. NET код:

String value = "";
for (int i = 0; i < array.length; i++)
{
    value += array[i]; // Build out the number as a string
}

int someInt = Integer.parseInt(value);
0 голосов
/ 25 марта 2016
Arrays.toString(nums).replaceAll("\\D+","");
0 голосов
/ 07 октября 2015

Использование:

public void turnArrToInt(int x[]){
    for(int i = 0; i < x.length; i++){
        number += x[i]*Math.pow(10,x.length-i-1);
    }

Вот как я это реализовал.Он берет каждый элемент, и если он является первым из массива, он умножает его на 10 ^ (длина массива - 1 - theCurrentElement) и добавляет все к результату.Работает для всех размеров.В основном умножение 100 на 100, 10 на 10 и т. Д.

Например: char = {1,2,3} умножит 1 на 100 2 на 10 3 на 1 и получит сумму всех иполучите 123.

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