如何判断java中的数组是否没有众数?
How to determine if there isn't a mode in an array in java?
我已经编写了代码来查找数组中的模式(最常出现的值)。如果数组中有一个模式(或多个模式),程序就可以正常工作。但是如果没有模式,我的代码会打印出整个数组。如果没有模式,我只希望它打印 "None"。
这里是我寻找模式的方法代码:
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));
根据您的代码和解释,我假设模式是 "the most common element that occurs at least twice"。在这种情况下,您的代码缺少的是 "at least twice" 部分。您的代码目前只找到所有最常出现的元素,显然对于一个没有元素出现至少两次的数组,返回整个数组是正确的。
要修复它,请将最后一行更改为:
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
.
我已经编写了代码来查找数组中的模式(最常出现的值)。如果数组中有一个模式(或多个模式),程序就可以正常工作。但是如果没有模式,我的代码会打印出整个数组。如果没有模式,我只希望它打印 "None"。
这里是我寻找模式的方法代码:
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));
根据您的代码和解释,我假设模式是 "the most common element that occurs at least twice"。在这种情况下,您的代码缺少的是 "at least twice" 部分。您的代码目前只找到所有最常出现的元素,显然对于一个没有元素出现至少两次的数组,返回整个数组是正确的。
要修复它,请将最后一行更改为:
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
.