因此,我必须计算用户输入并显示回给用户的次数。我创建了一个带for循环的数组,以计算出现的次数。但是,我一直坚持如何以正确的格式打印信息。当我打印数组时,它将打印所有数字,甚至重复的数字。在该示例中,我们应该打印没有重复的示例。我对从这里去完成它感到迷茫。稍加指导就可以了!
正确的输出: https://imgur.com/fAWdj5g
我当前的输出: https://imgur.com/bFR7zYF
我尝试制作另一个数组来获取重复项,甚至尝试删除该数组,但到目前为止还算不上运气。
int[] num = new int[7];
int[] totalCount = new int[7];
Scanner kb = new Scanner(System.in);
System.out.print("Enter seven numbers: ");
for(int i=0; i<num.length; i++){
num[i] = kb.nextInt();
if(num[i] == 0)
break;
}
for(int j=0; j<num.length; j++){
for (int i=0; i<num.length; i++){
if(num[j] == num[i]){
totalCount[j]++;
}
}
}
for(int k=0; k<num.length; k++){
System.out.printf("%d occurs %d time\n",num[k], totalCount[k]);
}
答案 0 :(得分:0)
在打印过程中,只需检查编号是否在以下位置打印过:
for(int j=0; j<num.length; j++){
boolean shouldPrint = true;
for (int i=0; i<j; i++){
if(num[j] == num[i]){
shouldPrint = false;
}
}
if (shouldPrint == true) {
System.out.printf("%d occurs %d time\n",num[k], totalCount[k]);
}
}
那样,第二个元素将不会被打印。
答案 1 :(得分:0)
如果可以使用java8和流,则可以使用Collectors.groupingBy
和Collectors.counting
将各个元素映射到它们的计数。
int[] num = new int[7];
Scanner kb = new Scanner(System.in);
System.out.print("Enter seven numbers: ");
for(int i=0; i<num.length; i++){
num[i] = kb.nextInt();
if(num[i] == 0)
break;
}
Map<Integer, Long> = Arrays.stream(num)
.boxed()
.collect(Collectors.groupingBy(p -> p, Collectors.counting()));
for (Map.Entry<Integer, Long> entry : countMap.entrySet()) {
System.out.printf("%d occurs %d times\n",entry.getKey(), entry.getValue());
}
答案 2 :(得分:0)
使用Java8或更高版本:
Arrays.stream(nums).boxed()
.collect(Collectors.groupingBy(n -> n, Collectors.counting()))
.entrySet()
.stream()
.forEach(e -> System.out.printf("%d occurs %d time(s)\n", e.getKey(), e.getValue()));
输出:
1 occurs 2 time(s)
2 occurs 3 time(s)
3 occurs 2 time(s)
4 occurs 1 time(s)
5 occurs 1 time(s)