HOWTO · Java
Ottieni le cifre separate di un numero Int in Java
Mostra come separare le cifre di un numero intero con esempi basati su diversi approcci, inclusa una soluzione ricorsiva.
In questa pagina
Per stampare le cifre di un int positivo nel loro ordine originale, puoi estrarle con % e /, oppure convertire il numero in una stringa e leggerne i caratteri. Questa guida illustra questi approcci e un’alternativa ricorsiva, usando sempre 12223.
% (mod) per ottenere il resto del numero intero dato
Con un numero positivo, % 10 restituisce la cifra più a destra, mentre / 10 la rimuove. L’estrazione procede quindi da destra a sinistra. Memorizza ogni resto in una pila LinkedList, poi rimuovi i valori per stamparli nell’ordine originale. Questo esempio è pensato per valori int positivi; zero e i valori negativi richiedono una gestione separata.
Il ciclo termina quando il valore rimanente diventa zero. Per questo, se l’input è zero, la lista rimane vuota e non viene stampata alcuna cifra. Se zero è un input valido, aggiungi un caso speciale che stampi 0. Il resto Java di un valore negativo può essere a sua volta negativo, quindi questo ciclo non gestisce in generale i numeri con segno. Puoi prima memorizzare il segno e lavorare sul valore assoluto, tenendo conto di Integer.MIN_VALUE, il cui valore positivo non è rappresentabile come int. Se l’input può includere quel valore, usa un modulo di tipo long oppure scegli un approccio basato su stringhe. Questo metodo aritmetico è utile quando servono direttamente i valori numerici delle cifre, per esempio per sommarle.
Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
int number = 12223;
LinkedList<Integer> digits = new LinkedList<>();
while (number > 0) {
digits.push(number % 10);
number /= 10;
}
while (digits.size() > 0) {
System.out.println(digits.pop());
}
}
}
1
2
2
2
3
String.toCharArray() per ottenere un array di caratteri
Converti l’intero in una stringa, poi chiama toCharArray() per ottenere un carattere per ogni cifra. Un char come '2' è un carattere, non il valore numerico 2; usa Character.digit quando nei calcoli ti serve la cifra come intero. Questa versione presuppone un input positivo, quindi l’array risultante contiene solo cifre.
Questo approccio mantiene l’ordine delle cifre visualizzate nell’input ed è facile da adattare per controlli o formattazione. Per i calcoli, Character.digit(digit, 10) converte ogni carattere di una cifra decimale nel suo valore intero; se la stringa di origine può contenere caratteri non numerici, controlla che il risultato non sia negativo. Convertendo un intero negativo in stringa, '-' è il primo carattere: saltalo o gestiscilo separatamente, senza trattarlo come una cifra. Lo zero diventa la stringa di un solo carattere "0", quindi questo approccio ne conserva naturalmente la cifra. Poiché int ha un intervallo limitato, la conversione restituisce la rappresentazione decimale completa di quel valore, ma non le cifre di un tipo numerico più grande né gli zeri iniziali di una stringa di input.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
public class Main {
public static void main(String[] args) {
int number = 12223;
char[] digits = String.valueOf(number).toCharArray();
for (char digit : digits) {
System.out.println(Character.digit(digit, 10));
}
}
}
1
2
2
2
3
Il metodo number.split("(?<=.)") per ottenere e suddividere l’array di stringhe
String.split restituisce un array di stringhe. L’espressione regolare (?<=.) individua una posizione subito dopo un carattere, perciò la stringa di un intero positivo viene suddivisa in una stringa per ogni cifra. Se il numero ha il segno meno, anche il segno diventa un elemento; quando servono caratteri anziché stringhe, toCharArray() è in genere più semplice.
Ogni elemento dell’array rimane testo, quindi convertilo in intero solo se i calcoli successivi lo richiedono. La conversione in stringa fa sì che lo zero produca "0", mentre un valore negativo produce un elemento iniziale con il segno, seguito dalle cifre: escludi il segno prima di convertire le cifre. Questa espressione è utile quando il resto del codice si aspetta già delle stringhe, ma aggiunge il costo dell’espressione regolare e dell’array senza offrire vantaggi rispetto a toCharArray() per una semplice iterazione sui caratteri. Come nell’altro approccio basato sulla conversione dell’intero in stringa, si ottiene la rappresentazione del valore numerico: non si possono recuperare gli zeri iniziali che non erano presenti nell’int originale.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
public class Main {
public static void main(String[] args) {
int number1 = 12223;
String number = String.valueOf(number1);
String[] digits = number.split("(?<=.)");
for (String digit : digits) {
System.out.println(digit);
}
}
}
1
2
2
2
3
Separare le cifre di un int con la ricorsione
Dividi ricorsivamente per 10 un numero positivo finché non raggiunge zero. Stampa ogni resto dopo il ritorno della chiamata ricorsiva: così viene stampata per prima la cifra più a sinistra. Questa versione non stampa nulla per zero e non gestisce gli input negativi; se tali valori sono validi per la tua applicazione, aggiungi una gestione esplicita.
La condizione di arresto è il caso base: quando la divisione raggiunge zero, le chiamate ritornano senza stampare; durante il ritorno, le chiamate in attesa stampano i resti memorizzati. Lo stack delle chiamate inverte l’ordine di estrazione senza bisogno di una raccolta separata. Per l’input zero, aggiungi una stampa diretta, perché alla prima chiamata la condizione del metodo è falsa. Per un input negativo, gestisci e stampa il segno prima di ricorrere su un valore assoluto sicuro; se ammetti tutti i valori int, considera anche Integer.MIN_VALUE. La ricorsione è chiara come esempio didattico con numeri brevi, mentre un ciclo iterativo è in genere più facile da estendere e non usa un frame dello stack per ogni cifra.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
public class Main {
public static void main(String[] args) {
recursion(12223);
}
public static void recursion(int number) {
if (number > 0) {
recursion(number / 10);
System.out.println(number % 10);
}
}
}
1
2
2
2
3