将整数转换为数字数组

75

我尝试将一个整数转换成一个数组。例如,将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: 针对字符串的输入:“”
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

我该如何解决这个问题?


1
Integer.toString(n).chars().map(a->a-'0').toArray(); - David S Alderson
增加了对负数值的支持,请查看下面的答案(针对新开发人员,因为已经过去8年了) - Phil
26个回答

0

for语句中的<=应该改为<

顺便说一下,可以更高效地完成这个任务,而不是使用字符串,而是使用整数的/10%10


0

我无法在 Vladimir's solution中添加评论,但我认为这种方法更有效,即使您的初始数字也可能低于10。

这是我的建议:

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

记得反转数组。


1
为什么要回滚?直接执行array.add(0, temp % 10)即可。 - Adam Ostrožlík

0

这种方法将会在结果数组中保持给定数字的相同数字顺序,并且不使用任何集合 API。

  1. 从反转数字的基本方法开始,比如说 1234。通过模运算符 (%) 取得最后一位数字,然后将数字除以 10 来获取最后一位数字。重复此步骤直到数字大于 0

  2. 因此,在获取每个最后一位数字时,您可以将其存储在数组中,因此您需要使用与数字中相同数量的数字初始化一个数组,您需要在那里使用 String 功能。但是,通过上述步骤,结果数组将以数字中的相反顺序排列。

  3. 因此,从数组的最后一个索引开始向第一个索引添加数字。

    int num = 1234;
    int[] ar = new int[String.valueOf(num).length()];
    int index = ar.length-1;
    
    while(num > 0) {
    
        ar[index--] = num % 10;
        num = num/10;
    }
    
    System.out.println(java.util.Arrays.toString(ar));
    

-1

我无法在Vladimir的决定中添加评论,但您可以立即创建一个朝正确方向部署的数组。这是我的解决方案:

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;
}

重要提示:此解决方案不适用于负整数。


-1

我修改了Jon Skeet的被接受答案,因为它不接受负数。

现在它能够适当地接受和转换数字:

public static void main(String[] args) {
    int number = -1203;
    boolean isNegative = false;
    String temp = Integer.toString(number);

    if(temp.charAt(0)== '-') {
        isNegative = true;
    }
    int len = temp.length();
    if(isNegative) {
        len = len - 1;
    }
    int[] myArr = new int[len];

    for (int i = 0; i < len; i++) {
        if (isNegative) {
            myArr[i] = temp.charAt(i + 1) - '0';
        }
        if(!isNegative) {
            myArr[i] = temp.charAt(i) - '0';
        }
    }

    if (isNegative) {
        for (int i = 0; i < len; i++) {
            myArr[i] = myArr[i] * (-1);
        }
    }

    for (int k : myArr) {
        System.out.println(k);
    }
}

输出

-1
-2
0
-3

-3
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;
    }
}

1
该问题涉及将 int 转换为 String,而不是相反。 - donturner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接