2015-06-20 57 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