我正在编写一个程序,它输出在整数数组中找到每个整数的次数。我已经完成了这个,但是,我有重复的输出字符串。
这是输出:
>run:
>Please enter integers from 0 to 100:
1
2
3
4
4
5
0
// 1 occurs 1 time //
2 occurs 1 time //
3 occurs 1 time //
4 occurs 2 times //
4 occurs 2 times //
5 occurs 1 time //
BUILD SUCCESSFUL (total time: 14 seconds)
正如你所看到的那样,“4次出现2次”打印两次,因为它在数组中被发现两次。
我只需要一些关于如何消除重复的方向。任何事情都会非常感激。
import java.util.*;
public class WorkSpace3 {
public static void main(String[] args) {
int i = 0;
int count = 0;
int key = 0;
System.out.print("Please enter integers from 0 to 100: ");
int[] myList = new int[100];
Scanner s = new Scanner(System.in);
for (i = 0; i < myList.length; i++)
{
myList[i] = s.nextInt();
if (myList[i] == 0)
break;
}
while (key < myList.length && myList[key] != 0) {
for (i = 0; i < myList.length; i++)
{
{ if (myList[i] == myList[key])
{ count++; } }
}
if (count == 1)
System.out.println(myList[key] + " occurs " + count + " time ");
if (count > 1)
System.out.println(myList[key] + " occurs " + count + " times ");
key++;
count = 0;
}
}
}
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用的一种简单方法是使用零标记已计数的元素。这种方法并不普遍;它只是因为你用零来标记最终用户输入序列的结尾才有效。
您必须稍微修改代码才能使用此方法:而不是在while
循环中查找零,设置变量以标记序列的长度。在开头将其设置为myList.length
,然后在休息时重置为i
。现在,您可以将列表移动到此最大计数,进行计数,然后将零设置为已计数的元素。
答案 2 :(得分:0)
使用Map
Map<Integer,Integer> counts=new HashMap<Integer,Integer>();
for (i = 0; i < myList.length; i++) {
if(counts.contains(myList[i]){
counts.put(myList[i],++counts.get(myList[i]);
}else{
counts.put(myList[i],1);
}