Java 计数数组中数字的出现次数
我累了一会儿。我试着调试,但我想不出解决办法。我试图数一数数字的出现。所以我的问题是当我打印输出时Java 计数数组中数字的出现次数,java,arrays,Java,Arrays,我累了一会儿。我试着调试,但我想不出解决办法。我试图数一数数字的出现。所以我的问题是当我打印输出时 3 occurs 1 times 1 occurs 1 times 0 occurs 1 times 2 occurs 1 times 1 occurs 2 times 3 occurs 2 times 2 occurs 2 times 0 occurs 2 times 10 occurs 1 times 4 occurs 1 times 而不是 1 occurs 2 times 0 occur
3 occurs 1 times
1 occurs 1 times
0 occurs 1 times
2 occurs 1 times
1 occurs 2 times
3 occurs 2 times
2 occurs 2 times
0 occurs 2 times
10 occurs 1 times
4 occurs 1 times
而不是
1 occurs 2 times
0 occurs 2 times
2 occurs 2 times
3 occurs 2 time
10 occurs 1 times
4 occurs 1 times
因此,如果数字出现次数超过1次,则应仅显示一次,而不是出现次数。干杯,这是密码
import java.util.*;
public class CountingOccuranceOfNumbers
{
public static void main(String[] args)
{
countNumbers();
}
public static void countNumbers()
{
Scanner input = new Scanner(System.in);
Random generator = new Random();
int[] list = new int[11];
int[] counts = new int[150];
int counter = 0;
int number = 1;
while(counter <= 10)
{
number = generator.nextInt(11);
list[counter] = number;
counter++;
}
for(int i=0; i<list.length - 1; i++)
{
counts[list[i]]++;
// System.out.print(list[i] + " ");
System.out.println(list[i] +" occurs " + counts[list[i]] + " times");
}
}
}
使用HashMap,ht来管理您的计数
if (ht.get(newNumber) == null) {
ht.put(newNumber, 1);
} else {
ht.put(newNumber, ++ht.get(newNumber));
}
在获取之前已更正HashMap和++中的哈希表。好的,我将尝试给您一两个提示 由于您会为多次出现的每个数字打印几行,因此在完成计数之前,您可能不应该打印任何内容。 看起来您的输出应该按照发生次数进行排序。如果是这种情况,那么在数组中保存计数可能不是最好的主意。考虑使用一个映射代替,其中键是数字,并且值是发生的数目。
您有一个循环来计算发生次数,这也给出了一个运行总数。似乎您只想在计数完成时打印总数。i、 e.它应该在另一个循环中。另一个选项是guava的Multiset类,它将为您跟踪计数:
int values[] = ...;
Multiset<Integer> ms = HashMultiset.create();
ms.addAll(Ints.asList(list));
int count0 = ms.count(Integer.valueOf(0));
int count1 = ms.count(Integer.valueOf(1));
这里,Multiset、HashMultiset和int都是番石榴类
注意,Multiset通过使用Map和counter来跟踪计数器,实现了上面提到的功能。它只是从您那里抽象出来,使您的代码更简单。创建一个HashMap,并使用key,value将新条目放入映射中,其中value是Integer
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class NumberRepetition {
public static void main(String[] args) throws Exception {
int size;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("enter size of array");
size=Integer.parseInt(br.readLine());
int el;
int[] a=new int[size];
for(int i=0;i<size;i++)
{
System.out.println("enter a number");
el=Integer.parseInt(br.readLine());
a[i]=el;
}
for(int i=0;i<size;i++)
{
for(int j=0;j<size-1;j++)
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
int count=0;
for(int i=0;i<size;i++)
{
for(int j=0;j<size;j++)
{
if(a[i]==a[j])
{
count++;
}
}
System.out.println(a[i]+" \t " +"occurence time is"+"\t"+count);
if(count!=0)
{
i=i+count-1;
}
count=0;
}
}
}
如果遇到相同的字符,则增加与该键关联的整数值。
o、 w这是一个新键,并将值设置为1
Integer entryValue;
Map map = new HashMap();
for ( int i =0; i < s1.length(); i++)
{
entryValue = (Integer)map.get(s1.charAt(i));
if (entryValue == null)
{
map.put(s1.charAt(i), new Integer(1));
}
else
{
map.put(s1.charAt(i), new Integer(entryValue.intValue()+1));
}
}
我建议你复习笔记和课文。提示将在那里找到。至于被困在那里寻求帮助等等。准确地解释你被困在哪里,你尝试了什么,为什么它不起作用。然后添加一个具体问题。但是,首先回顾一下你的笔记。如果有人说不出来,这本来是一个家庭作业问题,因此你在下面看到的一些答案将反映出人们试图给出原始海报提示,而不是仅仅给他/她一个完整的解决方案。请不要投反对票。请参阅。对于他所遇到的问题,数组是最好的集合,哈希表即使解决了问题,也无法解决他的问题。哈希映射(未同步)或树映射(已排序)将是更好的选择。@PeterLawrey您的权利,我感谢映射和编写表,如果另一个循环嵌套或独立于此循环,我会更正我的帖子。请格式化您的代码,以便更易于阅读,并提供信息,这将有所帮助。