将整数转换为数字数组

我尝试将整数转换为数组,例如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

有什么想法吗?


慕姐4208626
浏览 1053回答 3
3回答

慕斯王

眼前的问题是由于您使用<= temp.length()而不是< temp.length()。但是,您可以更简单地实现此目的。即使您使用字符串方法,也可以使用:String temp = Integer.toString(guess);int[] newGuess = new int[temp.length()];for (int i = 0; i < temp.length(); i++){&nbsp; &nbsp; newGuess[i] = temp.charAt(i) - '0';}< newGuess.length()在打印内容时也需要进行相同的更改以使用-否则,对于长度为4的数组(其有效索引为0、1、2、3),您将尝试使用newGuess[4]。for我编写的绝大多数循环都<在条件中使用,而不是<=。

Qyouu

您不需要转换int为String,只需使用% 10来获取最后一位,然后将int除以10即可得到下一位。int temp = test;ArrayList<Integer> array = new ArrayList<Integer>();do{&nbsp; &nbsp; array.add(temp % 10);&nbsp; &nbsp; temp /= 10;} while&nbsp; (temp > 0);这将使您留下包含相反顺序数字的ArrayList。您可以根据需要轻松还原它,并将其转换为int []。

皈依舞

public static void main(String[] args){&nbsp; &nbsp; int num = 1234567;&nbsp;&nbsp;&nbsp; &nbsp; int[]digits = Integer.toString(num).chars().map(c -> c-'0').toArray();&nbsp;&nbsp;&nbsp; &nbsp; for(int d : digits)&nbsp; &nbsp; &nbsp; &nbsp; System.out.print(d);&nbsp; &nbsp;&nbsp;}主要思想是将int转换为其String值Integer.toString(num);获取一个int流,它表示组成我们整数的String版本的每个char(〜digit)的ASCII值Integer.toString(num).chars();将每个字符的ascii值转换为其值。要获取char的实际int值,我们必须从实际char的ASCII码中减去char'0'的ASCII码值。要获得我们数字的所有数字,必须对组成与我们数字相等的字符串的每个字符(对应于数字)应用此操作,这是通过将下面的map函数应用于我们的IntStream来完成的。Integer.toString(num).chars().map(c -> c-'0');使用toArray()将int流转换为int数组Integer.toString(num).chars().map(c -> c-'0').toArray();
打开App,查看更多内容
随时随地看视频慕课网APP