我已经编写了代码来查找数组中的模式(最常出现的值)。如果数组中有一个模式(或多个模式),程序运行正常。但如果没有模式,我的代码会输出整个数组。如果没有模式,我只想打印“无”。
这是我找到模式的方法代码:
public static String mode(int [] a) {
String m = "None";
int k = 0;
int n = 0;
for (int i = 0; i < a.length; i++) {
n = 1;
for (int j = i; j < a.length; j++) {
if (a[i] == a[j]) {
n = n+1;
}
}
if (n > k) {
m = "" + a[i];
k = n;
}
else if (k == n) {
m = m + ", " + a[i];
}
}
return m;
}
这是我的主要方法代码:
System.out.println("Mode: " + mode(a));
答案 0 :(得分:2)
从你的代码和你的解释我假设模式是&#34;最常见的元素,至少发生两次&#34;。在这种情况下,您的代码缺失的是&#34;至少两次&#34;部分。您的代码目前只查找最常出现的所有元素,显然对于没有元素出现的数组至少两次返回整个数组是正确的。
要解决此问题,请更改最后一行:
return m;
到
if (k == 2) {
return "None";
}
return m;
请注意,我将k
与2
进行比较,而不是1
进行比较。这是因为您的代码中存在另一个问题,原因是您将n
初始化为1
,然后将其增加等于i
的元素数量元素,包括 i
- 元素。因此,如果元素出现一次,n
将等于2
,而不是1
,相应地,k
也是如此。因此,为了使代码更清晰,您可以初始化n = 0
,或者从i+1
开始内循环,而不是使用i
启动它。在上述任何一种情况下,将上面提供的剪切中的常量更改为1
。