我写了一个方法来查找数组的模式编号,数组的长度是10,所以我在数组中有十个数字,所以大小已满。我的问题是,如果模式是多个数字我如何修改我的代码以显示这两个数字!
例如,如果我的数组看起来像[1,1,1,2,2,2,3,5,6,8]
,则此情况下的模式为1和2。在我的代码中它只打印它获得的第一个模式。
所以它的打印模式是1。
public static int arryMode (int [] randomList) {
int maxValue = 0;
int maxCount = 0;
for (int i = 0; i < randomList.length; ++i) {
int count = 0;
for (int j = 0; j < randomList.length; ++j) {
if (randomList[j] == randomList[i]) {
++count;
}
}
if (count > maxCount) {
maxCount = count;
maxValue = randomList[i];
}
}
return maxValue;
}
答案 0 :(得分:1)
您需要收集几个最大值,而不是在找到更大的最大值时替换maxValue,而是需要从新的最大值开始。所有等于最大值的人都需要一个额外的案例。
要不重复添加最大值,请查看新的randomList [i]是否已经处于最大值,和/或使用Set。
public static Set<Integer> arryMode(int[] randomList) {
Set<Integer> maxValues = new LinkedHashSet<>(10);
int maxCount = 0;
for (int i = 0; i < randomList.length; ++i) {
if (maxValues.contains(randomList[i])) { // Heuristic.
continue;
}
int count = 0;
for (int j = 0; j < randomList.length; ++j) {
if (randomList[j] == randomList[i]) {
++count;
}
}
if (count > maxCount) {
maxCount = count;
maxValues.clear();
maxValues.add(randomList[i]);
} else if (count == maxCount) {
maxValues.add(randomList[i]);
}
}
return maxValues;
}
使用
for (int maxValue : maxValues) { ... }
答案 1 :(得分:0)
您可以使用ArrayList<Integer>
来存储模式的所有值。 ArrayList是一个表现为可调整大小的数组的对象。每次找到新模式时,如果其计数等于先前的最大计数,则将其添加到列表中。如果计数大于先前的最大计数,则清除列表,并将新模式添加到列表中。