2015-06-20 56 views
-1

我已經做了一個java程序,我必須只打印一次數組中每個元素的頻率而不使用集合。 下面是我執行它的代碼。如何停止計算剛纔計算的元素 例如4.4已經發生了2次,因此未來4次不應該計數。查找陣列中每個元素的頻率

static void countdigit(int x[]) 
{ 
    for(int pass=x.length;pass>=0;pass--) 
    { 
     for(int i=0;i<pass-1;i++) 
     { 
      if(x[i]<x[i+1]) 
      { 
       int temp=x[i]; 
       x[i]=x[i+1]; 
       x[i+1]=temp; 
      } 
     } 
    } 

    int count=0; 
    int p[]=new int[x.length]; 
    for(int i=0;i<x.length;i++) 
    { System.out.print(x[i]);  @Edit 1 
     System.out.print(" "); 
    } 
    for(int i=0;i<x.length;i++) 
    { for(int j=0;j<x.length;j++) 
     { 
     if(x[i]==x[j]) 
     {    
      count++; 
     } 
     } 
     System.out.println(); 
     System.out.println(count); 

     count=0; 
    } 
    } 
    public static void main(String s[]) 
{ 
    countdigit(new int[] {1,4,4,2,3,4,3,3}); 
} 
} 

OutPutShown 
4 4 4 3 3 3 2 1 
3 

3 

3 

3 

3 

3 

1 

1 

我想輸出

4 3, 

    3,3 

    2,1 

    1,1 

回答

0

你應該做一些改動。

首先,在輸出原始數字之後做一個println,將它們與第一個數字分開。

其次,您要打印的元素數與出現次數相同。在第一次打印計數器後,您會看到一個值,您應該跳過,不計算和打印,直到達到不同的值。

+0

如何檢查第一個元素是否打印? – javaCoderMakeSimple

0

爲什麼不使用新的Java 8個流API:

public class Main 
{ 
    public static void main(String[] args) 
    { 
     Integer tab[] = {12,45,45,12,1,36,78,12,45,12,45,89,36,45,14,78,12,45}; 
     HashMap<Integer,Integer> h = Stream.of(tab).collect(
       Collectors.groupingBy(e->e, 
       HashMap<Integer,Integer>::new, 
       Collectors.summingInt(e->1) 
       )); 
     System.out.println(h); 
    } 
} 
+0

如果不使用這些Apis,我必須編寫這個程序。使用你的邏輯而不是apis邏輯。 - – javaCoderMakeSimple

3

您可以使用標準的Java方法:

void countdigit(Integer[] x) { 
    List<Integer> ints = Arrays.asList(x); 
    for(int item : x) { 
     int frequency = Collections.frequency(ints, item); 
     System.out.println(frequency); 
    } 
} 
2

對於Java的緣故,這是今天2015年。即使是10年前它會是這樣的:

import java.util.HashMap; 

public class test { 

    static void countdigit(int x[]) { 
     HashMap<Integer,Integer>digits=new HashMap<Integer,Integer>(); 
     for (int i : x){ 
      if (digits.containsKey(i)){ 
       digits.put(i, digits.get(i)+1); 
      } else { 
       digits.put(i, 1); 
      } 
     } 
     for (int key:digits.keySet()){ 
      System.out.println(key+"x"+digits.get(key)); 
     } 
    } 

    public static void main(String s[]) { 
     countdigit(new int[] { 1, 4, 4, 2, 3, 4, 3, 3 }); 
    } 
} 

使用Java 8,溪流和lambda表達式這將是代碼的幾行,我很害羞呈現爲答案這個問題...

+0

我贊成這個解決方案。流和lambdas有它們的位置,但缺乏迭代解決方案的清晰度。 – bhspencer

+0

如果不使用這些Apis,我必須編寫這個程序。使用你的邏輯而不是apis邏輯。 – javaCoderMakeSimple

+0

@javaCoderMakeSimple它不是API,它現在是語言。我喜歡有21個命令和7個寄存器的彙編器。我真的這樣做。這是純潔的美麗。但是我不會在我的彙編代碼上加上Java標籤。 – Alex