我制作了一个java程序,我只需要在不使用Collections的情况下打印数组中每个元素的频率一次。 下面是我实现它的代码。如何停止计算我刚刚计算的元素 例如4 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 :(得分: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);
}
}
答案 1 :(得分: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,流和lambdas,这将是几行代码,我很难将其作为这个问题的答案...
答案 2 :(得分:0)
你应该做一些改变。
首先,在输出原始数字后执行println,将它们与第一个数字分开。
其次,您打印元素的计数与出现的次数相同。在您第一次看到值时打印计数后,您应该跳过这些值,而不计算和打印,直到您得到不同的值。
答案 3 :(得分:0)
为什么不使用新的java 8 stream 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);
}
}