2016-04-13 23 views
4

İki dizim var. Çıktının iki liste arasındaki ortak numaralar olmasını istiyorum, ancak aşağıdaki kod ile yinelenen ortak numaralar çıkacaktır.İki listeden yinelenen ortak çıktıyı kaldırın

double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00, 
     63.68, 83.56, 444.39, 144.20, 2889.00}; 

double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00, 
     83.56, 144.20, 2889.00, 3000.00, 2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00}; 

for(int i=0; i<arr1.length; i++){ 
     for(int j=0; j<arr2.length; j++){ 
      if(arr1[i] == arr2[j]){ 
       System.out.println(arr1[i]); 

bir insan sadece çıkışa Dizilerin her ikisi arasındaki ortak sayısını yardımcı ve yinelenen sayılar kaldırabilir miyim?

Teşekkürler.

+0

kullanımı set Yinelenen –

+0

olmasını istemek Array 'dizisi var, dizinin listesi değil. Ardından, sayıyı yazdırmak yerine döngüde, bir 'Set' e ekleyin ve ardından sayıları döngü dışında yazdırın. – TheLostMind

+0

Çifte kopyaların çift taraflı olarak görülmesi, görülebilir olmayan ondalık bir yerde farklı olabileceğinden tehlikelidir. İki ondalık basamağa ihtiyacınız varsa, değerlerinizi 100 ile çarpın ve bunları int veya long'a dönüştürün. – Robert

cevap

-2

için birinde bu işlemek ve basit bir şekilde ortak değerleri ekleyebilirsiniz ARR2 aynıysa.

double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00, 63.68, 83.56, 444.39, 144.20, 
       2889.00}; 


double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00, 83.56, 144.20, 2889.00, 3000.00, 
       2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00}; 

Set<Double> set = new HashSet<Double>(); 

for(int i=0;i<arr1.length;i++){ 

    for(int j=0;j<arr2.length;j++){ 
      if(arr1[i]==arr2[j]) 
       set.add(arr1[i]); 
    } 
} 

System.out.println(Arrays.toString(set.toArray())); 
+0

bir döngüde bir döngüye gerek yoktur. If cümlesi de gerekli değil. Çünkü bir değeri bir sette yalnızca bir kez saklayabilirsiniz. – osanger

+2

Yığın Taşmasına Hoş Geldiniz! Bu kod pasajı [bir açıklama dahil] [http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers] sorusunu çözebilirken, yayınınızın kalitesini artırmanıza yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerilerinizin nedenini bilmeyebileceğini unutmayın. – Ferrybig

+0

@Ferrybig Bunu aklımda tutacağım. –

1

Değerlerinizi bir grupta depolayın. Bir set, kopyaları otomatik olarak ortadan kaldırır.

Set<Double> set = new HashSet<Double>(); 

for(int i = 0; i < arr1.length; i++){ 
    set.add(arr1[i]); 
} 
for(int j = 0; j < arr2.length; j++){ 
    set.add(arr2[j]); 
} 

Double[] array = set.toArray(new Double[0]); 
// Output goes here 
System.out.println(Arrays.toString(array)); 

arr1 uzunluğu bir kümesi oluşturma döngü

0

Buna ne dersiniz?

for(int i=0; i<arr1.length; i++){ 
     for(int j=0; j<arr2.length; j++){ 
      if(arr1[i] == arr2[j]){ 
       System.out.println(arr1[i]); 
       break; 
      } 
     } 
} 

Diğer dizinin tüm öğeleriyle ilk dizinin her öğesini karşılaştırırken yinelenen değerler alıyorsunuz. Yani ikinci dizide iki kat bir değer ortaya çıkarsa, bu yazdırılacaktır. Sadece bir öğe eşleştiğinde iç döngüyü kırın, çift öğeleri kaldıracaktır.

1

Akışlar hakkında ne düşünüyorsunuz? (kümesi oluşturmak gerekmez) daha verimli ve daha hızlı öğle vakti olarak

double[] arr1 = {100.00, 100.00, 17246.40, 2568.00, 0.20, 9845.00, 5768.18, 0.20, 30.00, 
      63.68, 83.56, 444.39, 144.20, 2889.00}; 

    double[] arr2 = {2000.90, 508.07, 100.00, 17246.40, 5899.38, 17246.40, 17246.40, 2568.00, 
      83.56, 144.20, 2889.00, 3000.00, 2568.00, 60.00, 3135.00, 28329.91, 3135.00, 9845.00}; 

    DoubleStream stream1 = Arrays.stream(arr1); 
    DoubleStream stream2 = Arrays.stream(arr2); 
    Stream<Double> concat = Stream.concat(stream1.boxed(), stream2.boxed()); 
    concat.parallel().distinct().sorted().sequential().forEach(System.out::println); 

bir çıkış öncesi yayınlanmıştır (bir çeşit paralel farkı görmek ve) Olabilir: Eğer 'don

0.2 
30.0 
60.0 
63.68 
83.56 
100.0 
144.2 
444.39 
508.07 
2000.9 
2568.0 
2889.0 
3000.0 
3135.0 
5768.18 
5899.38 
9845.0 
17246.4 
28329.91 
İlgili konular