Non funziona bene il metodo next(n) perchè con dei numeri mi da il seguente errore
codice:
Exception in thread "main" java.lang.StackOverflowError
at java.lang.Character.digit(Unknown Source)
at java.lang.Character.digit(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Kaprekar.next(Kaprekar.java:21)
at Kaprekar.getSequence(Kaprekar.java:37)
// ripetuto tante volte
riporto tutta la classe
codice:
public class Kaprekar {
public static int next(int n){
String s = Integer.toString(n);
String s1 = "", s2 = "";
String[] array = new String[s.length()];
for(int i=0;i<array.length;i++){
char c = s.charAt(i);
array[i] = Character.toString(c);
}
Arrays.sort(array);
for(int i=0;i<array.length;i++){
s1 = s1.concat(array[i]);
}
for(int i=array.length-1;i>=0;i--){
s2 = s2.concat(array[i]);
}
21) int a = Integer.parseInt(s1);
int b = Integer.parseInt(s2);
int ris = b-a;
return ris;
}
public static List<Integer> getSequence(int n){
List<Integer> sequence = new ArrayList<Integer>();
37) return getSequence(n, sequence);
}
private static List<Integer> getSequence(int n, List<Integer> sequence){
if( n == 0 )
return sequence;
sequence.add(n);
return getSequence(next(n), sequence);
}
public static void stampaSequenza(int n){
List<Integer> i = getSequence(n);
for(Integer x : i)
System.out.println(x);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print("Numero: ");
int n = in.nextInt();
stampaSequenza(n);
}
}
dove stampare tipo in questo modo
Numero : 86
86 18 63 27 45 9 0
Numero : 678
678 198 792 693 594 495