Преобразовать целое число в массив цифр - PullRequest
36 голосов
/ 07 ноября 2011

Я пытаюсь преобразовать целое число в массив, например 1234, в int[] arr = {1,2,3,4};

Я написал функцию

public static void convertInt2Array(int guess)  {
    String temp = Integer.toString(guess);
    String temp2;
    int temp3;
    int [] newGuess = new int[temp.length()];
    for(int i=0;i<=temp.length();i++) {
        if (i!=temp.length()) {
            temp2 = temp.substring(i, i+1);
        } else {
            temp2 = temp.substring(i);
            //System.out.println(i);
        }
        temp3 =  Integer.parseInt(temp2);    
        newGuess[i] = temp3;
    }
            for(int i=0;i<=newGuess.length;i++) {
                System.out.println(newGuess[i]);
            }          
}

Но выдается исключение:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:504)
    at java.lang.Integer.parseInt(Integer.java:527)
    at q4.test.convertInt2Array(test.java:28)
    at q4.test.main(test.java:14)
Java Result: 1

Есть идеи?

Ответы [ 21 ]

0 голосов
/ 03 августа 2017

Я не могу добавить комментарии к решению Владимира, но я думаю, что это более эффективно, когда ваши начальные числа могут быть также ниже 10. Это мое предложение:

int temp = test;
ArrayList<Integer> array = new ArrayList<Integer>();
do{
  array.add(temp % 10);
  temp /= 10;
} while  (temp > 1);

Не забудьте перевернуть массив.

0 голосов
/ 10 июля 2017
int count = 0;
String newString = n + "";
char [] stringArray = newString.toCharArray();
int [] intArray = new int[stringArray.length];
for (char i : stringArray) {
  int m = Character.getNumericValue(i);
  intArray[count] = m;
  count += 1;
}
return intArray;

Бро скажи мне, если это работает.Тебе придется применить это в методе, сын мой.

0 голосов
/ 13 августа 2014
public static void main(String k[])
{  
    System.out.println ("NUMBER OF VALUES ="+k.length);
    int arrymy[]=new int[k.length];
    for (int i = 0; i < k.length; i++)
    {
        int newGues = Integer.parseInt(k[i]);
        arrymy[i] = newGues;
    }
}
0 голосов
/ 07 ноября 2011

<= в операторе for должно быть <

Кстати, это можно сделать гораздо эффективнее, не используя строки, но вместо этого используя /10 и %10 целых чисел.

_

0 голосов
/ 20 марта 2018

Вот функция, которая принимает целое число и возвращает массив цифр.

static int[] Int_to_array(int n)
{
     int j = 0;
     int len = Integer.toString(n).length();
     int[] arr = new int[len];
     while(n!=0)
     {
         arr[len-j-1] = n%10;
         n = n/10;
         j++;
     }
     return arr;
}
0 голосов
/ 02 июня 2018

Сначала примите ввод от пользователя как int, а затем преобразуйте его в String, а затем создайте массив символов размером str.length(), теперь заполните массив char с помощью цикла for, используя charAt().

Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
String str = Integer.toString(num);
char [] ch = new char [str.length()];
for(int i=0;i<str.length();i++)
{
ch[i]= str.charAt(i);   
} 
for(char c: ch)
{   
System.out.print(c +" ");
}
0 голосов
/ 28 июля 2015

Вызовите эту функцию

  public int[] convertToArray(int number) {
    int i = 0;
    int length = (int) Math.log10(number);
    int divisor = (int) Math.pow(10, length);
    int temp[] = new int[length + 1];

    while (number != 0) {
        temp[i] = number / divisor;
        if (i < length) {
            ++i;
        }
        number = number % divisor;
        if (i != 0) {
            divisor = divisor / 10;
        }
    }
    return temp;
}
0 голосов
/ 07 января 2019

Не могу добавить комментарии к решению Владимира, но вы можете сразу сделать развернутый массив в нужном направлении. Вот мое решение:

public static int[] splitAnIntegerIntoAnArrayOfNumbers (int a) {
    int temp = a;
    ArrayList<Integer> array = new ArrayList<Integer>();
    do{
        array.add(temp % 10);
        temp /= 10;
    } while  (temp > 0);
    int[] arrayOfNumbers = new int[array.size()];
    for(int i = 0, j = array.size()-1; i < array.size(); i++,j--) 
        arrayOfNumbers [j] = array.get(i);
    return arrayOfNumbers;
}

Важно: Это решение не будет работать для отрицательных целых чисел.

0 голосов
/ 31 марта 2016

Я могу предложить следующий метод:

преобразовать число в строку -> преобразовать строку в массив символов -> преобразовать массив символов в массив целых чисел

Вот мой код:

public class test {
public static void main(String[] args) {
    int num1 = 123456; // example 1
    int num2 = 89786775; // example 2

    String str1 = Integer.toString(num1); // converts num1 into String
    String str2 = Integer.toString(num2); // converts num2 into String

    char[] ch1 = str1.toCharArray();// gets str1 into an array of char
    char[] ch2 = str2.toCharArray();// gets str2 into an array of char

    int[] t1 = new int[ch1.length];// defines t1 for bringing ch1 into it
    int[] t2 = new int[ch2.length];// defines t2 for bringing ch2 into it

    for(int i=0;i<ch1.length;i++) // watch the ASCII table 
        t1[i]= (int) ch1[i]-48;// ch1[i] is 48 units more than what we want

    for(int i=0;i<ch2.length;i++)// watch the ASCII table 
        t2[i]= (int) ch2[i]-48;// ch2[i] is 48 units more than what we want
    }
}
0 голосов
/ 27 июня 2019

Давайте решим, что с помощью рекурсии ...

ArrayList<Integer> al = new ArrayList<>();
void intToArray(int num){
    if( num != 0){
        int temp = num %10;
        num /= 10;
        intToArray(num);
        al.add(temp);
    }
}

Объяснение: Предположим, значение num = 12345.

Во время первого вызова функции temp содержит значение: 5 и значение num =1234. Он снова передается функции, теперь временное значение удержания: 4 и значение num = 123 ... эта функция вызывает себя, пока значение num не станет равным 0.

StackTrace:

 temp - 5 | num - 1234
 temp - 4 | num - 123
 temp - 3 | num - 12
 temp - 2 | num - 1
 temp - 1 | num - 0

 And then, It calls add method of ArrayList and value of temp is added to it, so value of list:
 ArrayList - 1
 ArrayList - 1,2
 ArrayList - 1,2,3
 ArrayList - 1,2,3,4
 ArrayList - 1,2,3,4,5

Надеюсь, с помощью рекурсии у вас возникнут сомнения.

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