Convertir entier en tableau de chiffres

J'essaie de convertir un nombre entier en tableau par exemple 1234 à int[] arr = {1,2,3,4};

J'ai écrit une fonction

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

, Mais une exception est levée:

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

Avez-vous des idées?

32
demandé sur Peter O. 2011-11-07 10:57:43

17 réponses

Le problème immédiat est dû au fait que vous utilisez <= temp.length() au lieu de < temp.length(). Cependant, vous pouvez y parvenir beaucoup plus simplement. Même si vous utilisez l'approche string, vous pouvez utiliser:

String temp = Integer.toString(guess);
int[] newGuess = new int[temp.length()];
for (int i = 0; i < temp.length(); i++)
{
    newGuess[i] = temp.charAt(i) - '0';
}

, Vous devez faire le même changement d'utiliser < newGuess.length() lors de l'impression du contenu de trop - sinon, pour un tableau de longueur 4 (qui a valide les indices 0, 1, 2, 3) vous allez essayer d'utiliser newGuess[4]. La grande majorité des boucles for que j'écris utilisent < dans la condition, plutôt que <=.

48
répondu Jon Skeet 2011-11-07 07:02:42

Vous n'avez pas besoin de convertir int en String, utilisez simplement % 10 pour obtenir le dernier chiffre, puis divisez votre int par 10 pour passer au suivant.

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

Cela vous laissera avec ArrayList contenant vos chiffres dans l'ordre inverse. Vous pouvez facilement le restaurer si nécessaire et le convertir en int[].

34
répondu Vladimir 2011-11-07 07:24:27
public static void main(String[] args)
{
    int num = 1234567;  
    int[]digits = Integer.toString(num).chars().map(c -> c-'0').toArray();  
    for(int d : digits)
        System.out.print(d);    
}

L'idée principale est

  1. convertit l'int en sa valeur de chaîne
Integer.toString(num);
  1. obtenir un flux de int qui représente la valeur ASCII de chaque caractère (~digit) composant la version de chaîne de notre entier
Integer.toString(num).chars();
  1. convertit la valeur ascii de chaque caractère en sa valeur. Pour obtenir la valeur int réelle d'un char, nous devons soustraire la valeur de code ASCII du char ' 0 ' du code ASCII du char réel. Pour obtenir tous les chiffres de notre numéro, cette l'opération doit être appliquée sur chaque caractère (correspondant au chiffre) composant l'équivalent de chaîne de notre Nombre, ce qui se fait en appliquant la fonction map ci-dessous à notre IntStream.
Integer.toString(num).chars().map(c -> c-'0');
  1. convertit le flux de int en un tableau de int en utilisant toArray ()
Integer.toString(num).chars().map(c -> c-'0').toArray();
22
répondu Marie Diana Tran 2018-06-01 15:36:18

Dans Scala, vous pouvez faire comme:

def convert(a: Int, acc: List[Int] = Nil): List[Int] =
  if (a > 0) convert(a / 10, a % 10 +: acc) else acc

Dans une ligne et sans Inverser l'ordre.

2
répondu Sky 2016-08-28 10:44:42

Vous pouvez utiliser-

private int[] createArrayFromNumber(int number) {
    String str = (new Integer(number)).toString();
    char[] chArr = str.toCharArray();
    int[] arr = new int[chArr.length];
    for (int i = 0; i< chArr.length; i++) {
        arr[i] = Character.getNumericValue(chArr[i]);
    }
    return arr;
}
2
répondu Abhijeet srivastava 2017-09-18 09:11:01

, Vous pouvez simplement faire:

char[] digits = string.toCharArray();

Et vous pouvez ensuite évaluer les caractères en tant qu'entiers: par exemple:

char[] digits = "12345".toCharArray();
int digit = Character.getNumericValue(digits[0]);
System.out.println(digit); // prints 1
2
répondu James Wierzba 2017-12-04 23:02:13

, Il serait beaucoup plus simple d'utiliser les String.split méthode

public static void fn(int guess) {
    String[] sNums = Integer.toString(guess).split("");
    for (String s : nums) {
    ...
1
répondu zellio 2011-11-07 07:02:33

Vous n'avez pas besoin d'utiliser substring(...). Utiliser temp.charAt(i) pour obtenir un chiffre et utilisez le code suivant pour convertir char à int.

char c = '7';
int i = c - '0';
System.out.println(i);
1
répondu wannik 2011-11-07 07:05:19

temp2 = temp.substring(i); retournera toujours la chaîne vide "".

Au lieu de cela, votre boucle devrait avoir la condition i<temp.length(). Et temp2 devrait toujours être temp.substring(i, i+1);.

De même, lorsque vous imprimez newGuess, vous devez boucler jusqu'à newGuess.length mais pas y compris. Donc, votre condition devrait être i<newGuess.length.

0
répondu tskuzzy 2011-11-07 07:00:19

Le <= dans la déclaration devrait être un <

BTW, il est possible de le faire beaucoup plus efficacement sans utiliser de chaînes, mais à la place en utilisant /10 et %10 d'entiers.

_

0
répondu Eamonn O'Brien-Strain 2011-11-07 07:02:49

Appelez ces fonctions

  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
répondu Nayan 2015-07-28 10:45:39

Je peux suggérer la méthode suivante:

Convertir le nombre en une chaîne de caractères--> convertir la chaîne en un tableau de caractères--> convertir le tableau de caractères dans un tableau d'entiers

Voici mon code:

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
répondu Erfan 2016-03-31 20:42:28
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;

Bro dites-moi si cela fonctionne. Vous devrez mettre cela dans une méthode mon fils.

0
répondu PantOffl 2017-07-10 05:51:41

Je ne peux pas ajouter de commentaires à la solution de Vladimir, mais je pense que c'est plus efficace aussi lorsque vos chiffres initiaux pourraient être également inférieurs à 10. Voici ma proposition:

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

N'oubliez pas d'inverser le tableau.

0
répondu Roberto Gimenez 2017-08-03 14:40:16

Voici la fonction qui prend un nombre entier et retourne un tableau de chiffres.

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
répondu Shadab Eqbal 2018-03-20 07:46:53

Prenez D'abord l'entrée de l'utilisateur en tant qu'int, puis convertissez-la en String, puis créez un tableau de caractères de taille str.length(), Remplissez maintenant un tableau de caractères avec la boucle for en utilisant 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
répondu VIR 2018-06-02 09:39:11
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;
    }
}
-2
répondu bhargav 2014-08-13 05:42:08