J'essaie de convertir un entier en tableau, par exemple 1234 en 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?
Le problème immédiat est dû au fait que vous avez utilisé <= temp.length()
au lieu de < temp.length()
. Cependant, vous pouvez y parvenir beaucoup plus simplement. Même si vous utilisez l'approche par chaîne, 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 la même modification pour utiliser < newGuess.length()
lors de l'impression du contenu. Sinon, pour un tableau de longueur 4 (qui a des index valides 0, 1, 2, 3), vous essayez d'utiliser newGuess[4]
. La grande majorité des boucles for
que j'écris utilise <
dans la condition, plutôt que <=
.
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 retourner si nécessaire et le convertir en int [].
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
Integer.toString(num);
Integer.toString(num).chars();
Integer.toString(num).chars().map(c -> c-'0');
Integer.toString(num).chars().map(c -> c-'0').toArray();
Il serait beaucoup plus simple d'utiliser la méthode String.split
public static void fn(int guess) {
String[] sNums = Integer.toString(guess).split("");
for (String s : nums) {
...
En 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
En une ligne et sans inverser la commande.
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;
}
Vous n'êtes pas obligé d'utiliser substring(...)
. Utilisez temp.charAt(i)
pour obtenir un chiffre et utilisez le code suivant pour convertir char
en int
.
char c = '7';
int i = c - '0';
System.out.println(i);
Vous pouvez faire quelque chose comme ça
public int[] convertDigitsToArray(int n) {
int [] temp = new int[String.valueOf(n).length()]; //calculate the length of digits
int i = String.valueOf(n).length()-1 ; //initialize the value to the last index
do {
temp[i]= n%10;
n = n/10;
i--;
}while(n>0);
return temp;
}
cela permettra également de maintenir l'ordre.
répondez s'il vous plaît si cela vous a aidé.
Commencez par prendre l'entrée utilisateur en tant qu'entier 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 pour boucle 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 +" ");
}
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 me dit si cela fonctionne. Vous devrez mettre cela dans une méthode mon fils.
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
sans l'inclure. Donc, votre condition devrait être i<newGuess.length
.
Le <=
dans l'instruction for devrait être un <
En passant, il est possible de le faire beaucoup plus efficacement sans utiliser de chaînes, mais plutôt avec /10
et %10
d’entiers.
_
Je peux suggérer la méthode suivante:
convertir le nombre en chaîne -> convertir la chaîne en un tableau de caractères -> convertir le tableau de caractères en 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
}
}
Je ne peux pas ajouter de commentaires à la solution de Vladimir, mais je pense que cela est plus efficace également lorsque vos chiffres initiaux pourraient également être inférieurs à 10. »
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.
Appelez ces fonction
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;
}
Voici la fonction qui prend un 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;
}