【发布时间】:2019-10-31 16:57:46
【问题描述】:
我一直在查看我在 java 中的旧工作,在互联网上寻找答案,但我找不到我需要的东西。我有一个有序数组,将值输入到方法 countOccurence(int [] list) 中。我了解阵列的工作原理,但我的问题是; 数组如何在不创建重复项的情况下移动到下一个数字。
数组如何能够跳过重复项并一直移动到最后而不单独遍历所有重复项。
这里是代码。
public static void Calculations(){
Scanner in = new Scanner(System.in);
int[] values = {1, 2, 2, 2, 2, 3};
countOccurence(values);
}
public static void countOccurence(int[] list) {
//12 23 45 56 56 0
for (int i = 0; i < list.length; i++) {
int count = 0;
for (int j = 0; j < list.length ; j++) {
if (list[j] == i)
count += 1
}
if (count != 0)
System.out.printf("%d happens %d %s%n",
i, count, count > 1 ? "times" : "time");
}
}
}
【问题讨论】:
-
这个程序真的给你出现的次数吗?不应该是
if (list[j] == list[i])吗? -
这不是解决问题的最佳方式,因为结果会是这样。 0 次出现 1 次 1 次出现 4 次 2 次出现 4 次 3 次出现 4 次 4 次出现 4 次 5 次出现 1 次
-
这是通常需要的结果 1 出现 1 次 2 出现 4 次 3 出现 1 次
-
我真正需要知道的是,阵列如何智能到不计算其他 2 并直接跳到 i=3。它在一次迭代中用 -j- 遍历了 2,然后跳转到 -i- (5)
-
根据你关于使用
list[j]==i而不是list[j]==list[i]的解释,那你为什么要使用外循环呢?如果您的想法是检查所有数字,那么外部循环退出条件i<list.length不正确吗?不应该是i<maxValueInArray之类的吗?