2016-04-09 12 views
1

test edilirken çalışmaz Kullanıcıdan bir sayı almalı ve bunları tek bir haneye ayırmalı ve önceden girilmiş olan numarayı eklemeden veri yapısına depolamalı.10,100,200,300 ...

Programım, kalanını veren sayı için iyi çalışıyor, ancak kalanını sıfırlayan sayı için işe yaramıyor.

Şimdilik

Dinamik kodumu yapmak din, sadece ben

değişen test Ve kod şöyledir:

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); 
} 
} 

çalışır kod yazmak için bana yardım edin tüm sayılar için.

+0

Bu algoritma sadece hiç 1 numara üretecek. Hangi seriler yaratmaya çalışıyor? – Bohemian

cevap

1

Yinelenmeleri önlemek istiyorsanız, ArrayList yerine HashSet kullanıyor olmalısınız.

Değerleri HashSet içine koymaya başlayabilirsiniz. İşte

kod parçacığı geçerli:

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); 
} 

Çıktı: Genel olarak

[5] 
+0

kesinlikle bir liste kullanmaktan daha şık bir çözüm, ancak neden tamsayıdan karaktere geçiş? –

+0

@ P.J.Meisch Evet, kesinlikle haklısınız. Onu "Tamsayı" olarak değiştirdim. Bunun için teşekkürler. :) – user2004685

+0

@ user2004685 İyi çalışıyor, ben java için yeni ve ben hakkında bilmiyorum ** HashSet **. Eğer sakıncası yoksa bana yaptığın kodu açıklayabilir misin? –

0

Değil mi eser break döngünün dışında bir yinelenen rakamı bulundu zamanlar senin yüzünden. Gereksiz break'u kaldırın.

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); 
} 

çıkışı:

[0, 5] 
+0

Bu gerçekten iyi çalışıyor. Kevin Esche teşekkür ederiz. –