计算数组中的整数;如何消除重复的输出字符串
Counting integers in an array; How to eliminate duplicate output strings
我正在编写一个程序,输出每个整数在整数数组中被找到的次数。我已经做到了这一点,但是,我有重复的输出字符串。
这是输出:
>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 occurs 2 times”打印了两次,因为它在数组中出现了两次。
我只需要一些关于如何消除重复项的指导。任何事情都将不胜感激。
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;
}
}
}
查看集合元素:
https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
从数组创建集合元素您删除了重复项。
您可以使用的一种简单方法是用零标记您计算过的元素。这种方法并不通用;它之所以有效,只是因为您使用零来标记最终用户输入序列的结尾。
您必须稍微修改您的代码才能使用此方法:与其在 while
循环中寻找零,不如设置一个变量来标记序列的长度。开始时设置为myList.length
,然后在中断时重新设置为i
。现在您可以将列表遍历到这个最大计数,进行计数,然后将零设置到您已经计数的元素中。
尝试使用 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);
}
我正在编写一个程序,输出每个整数在整数数组中被找到的次数。我已经做到了这一点,但是,我有重复的输出字符串。
这是输出:
>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 occurs 2 times”打印了两次,因为它在数组中出现了两次。
我只需要一些关于如何消除重复项的指导。任何事情都将不胜感激。
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;
}
}
}
查看集合元素:
https://docs.oracle.com/javase/7/docs/api/java/util/Set.html
从数组创建集合元素您删除了重复项。
您可以使用的一种简单方法是用零标记您计算过的元素。这种方法并不通用;它之所以有效,只是因为您使用零来标记最终用户输入序列的结尾。
您必须稍微修改您的代码才能使用此方法:与其在 while
循环中寻找零,不如设置一个变量来标记序列的长度。开始时设置为myList.length
,然后在中断时重新设置为i
。现在您可以将列表遍历到这个最大计数,进行计数,然后将零设置到您已经计数的元素中。
尝试使用 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);
}