2016-04-09 2 views
1

Ich brauche eine Nummer vom Benutzer, und trennen Sie sie in einzelne Ziffer und speichern Sie es in der Datenstruktur, ohne eine der bereits eingefügten Nummer einfügen.10,100,200,300 ... funktioniert nicht während des Testens

Mein Programm funktioniert gut für die Zahl, die einige Rest gibt, aber es funktioniert nicht für die Zahl, die den Rest Null gibt.

public class Samp { 

public static void main(String[] args) { 
    int i = 555,n; 
    List<Integer> digits = new ArrayList<Integer>(); 
    while(i > 0) { 
     n = i % 10; 
     if(digits.contains(n)){ 
      break; 
     }else{ 
      digits.add(n); 
     } 
     i /= 10; 
    } 
    System.out.println(digits); 
} 
} 

Bitte helfen Sie mir den Code zu schreiben, die funktioniert:

Vorerst din ich meinen Code dynamisch machen, ich durch eine Änderung der von i

Und mein Code geht so gerade getestet für alle Nummern.

+0

Dieser Algorithmus wird immer nur 1 Nummer produzieren. Welche Serien versuchen zu erstellen? – Bohemian

Antwort

1

Sie sollten einen HashSet anstelle von ArrayList verwenden, wenn Sie Dubletten vermeiden möchten.

Sie können einfach beginnen, die Werte in HashSet zu setzen. Hier

ist der Code-Schnipsel:

public static void main (String[] args) throws Exception { 
    int i = 555; 
    Set<Integer> set = new HashSet<>(); 
    while(i > 0) { 
     set.add(i % 10); 
     i /= 10; 
    } 
    System.out.println(set); 
} 

Ausgang:

[5] 
+0

sicherlich eine elegantere Lösung als die Verwendung einer Liste, aber warum der Wechsel von Integer zu Character? –

+0

@ P.J.Meisch Ja, du hast absolut recht. Ich habe es in "Integer" geändert. Dank dafür. :) – user2004685

+0

@ user2004685 Das funktioniert gut, ich bin neu in Java und ich weiß nicht über ** HashSet **. Wenn es Ihnen nichts ausmacht, können Sie mir bitte den Code erklären, den Sie gemacht haben? –

0

Es spielt keine Arbeit im Allgemeinen, weil Sie break aus der Schleife, wenn es eine doppelte Ziffer gefunden. Entfernen Sie einfach die unnötige break.

public static void main(String[] args) { 
    int i = 5000, n; 
    List<Integer> digits = new ArrayList<Integer>(); 
    while (i > 0) { 
     n = i % 10; 
     if (!digits.contains(n)) { 
      digits.add(n); 
     } 
     i /= 10; 
    } 
    System.out.println(digits); 
} 

Ausgang:

[0, 5] 
+0

Das funktioniert wirklich gut. Danke Kevin Esche. –