Donc, si j'ai un entier saisi:
int num_1 = 128
Comment pourrais-je analyser le nombre, obtenir 1, 2 et 8 et les assigner à différentes variables?
Merci!
le moyen inefficace de le faire serait de convertir l'entier en chaîne et d'itérer les caractères de la chaîne.
le moyen le plus efficace serait quelque chose comme:
int n = 128;
while (n > 0) {
int d = n / 10;
int k = n - d * 10;
n = d;
System.out.println(k);
}
La réponse que Thilo a écrite est bonne mais incomplète, vous commencez par faire:
char[] digitsAsChars = String.valueOf(num_1).toCharArray();
et alors:
int[] digits = new int[charNums.length];
for(int i=0; i<charNums.length; i++){
digits[i] = charNums[i]-48;//convert char to int
}
maintenant digits
contient les chiffres du nombre sous forme de tableau int
int num = 128;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
System.out.println("digit: " + j);
}
Sortie:
digit: 1
digit: 2
digit: 8
essayer
while (num_1> 0){
int digit = num_1%10;
num_1 = num_1/10;
System.out.println(digit);
}
Transformez-le en chaîne et allez caractère par caractère pour les chiffres:
char[] digits = String.valueOf(num_1).toCharArray();
Voici un moyen:
String digits = Integer.toString(num_1);
int digit1 = Character.digit(digits.charAt(0), 10);
int digit2 = Character.digit(digits.charAt(1), 10);
int digit3 = Character.digit(digits.charAt(2), 10);
Bien sûr, si l'entier a plus de trois chiffres, utiliser une boucle serait plus pratique:
String sDigits = Integer.toString(num_1);
char[] cDigits = sDigits.toCharArray();
int[] digits = new int[cDigits.length];
for (int i = 0; i < cDigits.length; i++)
digits[i] = Character.digit(cDigits[i], 10);
Avec le code ci-dessus en place, il est facile d'extraire les chiffres du tableau:
int digit1 = digits[0];
int digit2 = digits[1];
int digit3 = digits[2];
Recueillir tous les chiffres du tableau et utiliser ensuite
import Java.lang.Integer;
import Java.lang.String;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.Arrays;
public class Test
{
public static void main(String[] args) {
Integer num = 12345;
Integer[] digits = getDigits(num.toString());
System.out.println(Arrays.toString(digits));
}
public static Integer[] getDigits(String number) {
List<Integer> digits = new ArrayList<Integer>();
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
digits.add(j);
}
return digits.toArray(new Integer[]{});
}
}
La sortie devrait être
[1, 2, 3, 4, 5]
Voici une façon purement mathématique de le faire:
// Returns digit at pos
static int digitAt(int input, int pos){
int i =(int) (input%(Math.pow(10, pos)));
int j = (int) (i/Math.pow(10, pos-1));
return Math.abs(j); // abs handles negative input
}
Par exemple, si input = 1234
et pos = 2
, alors i
est 34
. Nous divisons le 34
par 10
et arrondissons pour obtenir un 3
.
Pas si joli, mais ça marche!
Pour savoir d'où viennent les chiffres, j'irais:
return (x/10/10) + (x%10) + (x/10)%10;
Si vous n'appréciez pas l'idée de la conversion String
et que vous souhaitez effectuer une itération dans un ordre normal, essayez ceci:
int n = 123456789;
int digits = (int) Math.log10(n);
for (int i = (int) Math.pow(10, digits); i > 0; i /= 10) {
System.out.println(n / i);
n %= i;
}
La sortie serait
1
2
3
4
5
6
7
8
9
Ce code retourne le nibble à l'index donné. Si vous voulez obtenir tous les chiffres, vous pouvez appeler cette méthode avec tous les index de votre numéro. Cela ne fonctionne pas sur la représentation hexadécimale d'un nombre mais sur la décimale.
public static int getNibble(int number, int nibbleIndex)
{
int nibble = 0;
while (nibbleIndex >= 0)
{
int division = number / 10;
nibble = number - division * 10;
number = division;
nibbleIndex--;
}
return nibble;
}
Maintenant, si vous essayez de distinguer des nombres dans une chaîne parmi des lettres, cela devrait en tenir compte.
String string = "Th1s 1s n0t a number";
int newNum = Integer.parseInt(string.replaceAll("[\\D]", ""));
return newNum;
Cela devrait renvoyer 110
En outre, voici un lien vers une discussion de pile que j’ai trouvée très utile . Obtenez int de String, contenant également des lettres, en Java
String str = Integer.toString(num_1);
Vous pouvez obtenir 1,2,8 de cette str