2017-11-11 9 views
-1
public class Array_Duplicate { 
    public static void main(String[] args){ 
     int[] arr={2,4,2,2,6,3}; 
     int count=0; 
     for(int i=0;i<arr.length;i++){ 
      for(int j=i+1;j<arr.length;j++){ 
       if(arr[i]== arr[j]){ 
        count++; 
        System.out.println(arr[i]+" Repeated "+count+" Times"); 
       } 
      } 
     } 
    } 
} 

サンプル出力頻度は3回印刷しているが、私はそれが1時間

2 Repeated 1 Times 
2 Repeated 2 Times 
2 Repeated 3 Times 

必要な出力

2 Repeated 3 times 

私はこれをどのように行うことができますが、印刷されるようにしたいですか?

+0

!とても奇妙!! ところで、 'Map'を使うだけで十分であり、あなたの質問は彼の本を読んでいないような人から非常に初めになります! – Yahya

答えて

0

ストアのようなものマップ上のカウント:Java8ストリームAPIと

public class Array_Duplicate { 
    public static void main(String[] args){ 
    int[] arr={2,4,2,2,6,3}; 
    Map<Integer, Integer> counts = new LinkedHashMap<>(); 
    for(int i=0;i<arr.length;i++){ 
     int value = arr[i]; 
     if (counts.containsKey(value)) { 
     counts.put(arr[i], counts.get(value) + 1); 
     } else { 
     counts.put(value, 1); 
     } 
    } 

    for (Integer value : counts.keySet()) { 
     int count = counts.get(value); 
     if (count > 1) { 
     System.out.println(value +" Repeated "+ count +" Times"); 
     } 
    } 
    } 
} 

同様のアプローチ:

public class Array_Duplicate { 
    public static void main(String[] args){ 
    int[] arr={2,4,2,2,6,3}; 
    Arrays.stream(arr) 
     .boxed() 
     .collect(Collectors.groupingBy(i -> i, Collectors.summingInt(i -> 1))) 
     .entrySet().stream() 
     .filter(c -> c.getValue() > 1) 
     .forEach(c -> System.out.println(c.getKey() +" Repeated "+ c.getValue() +" Times")); 
    } 
} 
-1

シンプルです。 内部ループが終了した後にdisplayステートメントを保持します。

この

public class Array_Duplicate { 
public static void main(String[] args){ 
    int[] arr={2,4,2,2,6,3}; 
    int count=0; 
    for(int i=0;i<arr.length;i++){ 
     for(int j=i+1;j<arr.length;j++){ 
      if(arr[i]== arr[j]){ 
       count++; 
      } 
     } 
     System.out.println(arr[i]+" Repeated "+count+" Times"); 
    } 
    } 
} 
+0

これを外部変数に代入して一時的に保存します – Airhead

0

にあなたがしたくない場合任意のクラスライブラリを使用する(これはJavaで普通ではありません)、そうすることができますこのようmething:

public class ArrayDuplicate { 

    public static void main(String[] args){ 
     int[] theArray = {2,4,2,2,6,3}; 
     int[] arr = theArray; // if you don't want the original array, you don't need to make a copy of it 
     while(arr.length>0){ 
      int theCount = count(arr); 
      System.out.println(arr[0]+" Repeated "+ theCount +" Times"); 
      arr = updatedArray(arr, arr[0], arr.length-theCount); 
     } 
    } 

    static int count(int[] arr){ 
    int counter=0, value=arr[0]; 
    for(int i=0;i<arr.length;i++){ 
     if(value == arr[i]){ 
      counter++; 
     } 
    } 
    return counter; 
    } 

    static int[] updatedArray(int[]arr, int value, int newLength){ 
    int []updatedArr = new int[newLength]; 
    int counter = 0; 
    for(int i=0;i<arr.length;i++){ 
     if(arr[i]!=value){ 
     updatedArr[counter++]=arr[i]; 

     } 
    } 
    return updatedArr; 
    } 
} 

出力:あなたはあなたの最初のアプローチで任意のクラスライブラリを使用して、ほとんどのクラスライブラリとJava 8を使用して答えを受け付けておりません

2 Repeated 3 Times 
4 Repeated 1 Times 
6 Repeated 1 Times 
3 Repeated 1 Times 
関連する問題