如何判断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;

请注意,我将 k2 进行比较,而不是 1。这是因为您的代码中存在另一个问题,原因是您将 n 初始化为 1,然后将其递增等于第 i 个元素的数量元素,包括i个元素。因此,如果元素出现一次,n 将等于 2,而不是 1,相应地,k 也将等于。因此,为了使代码更简洁,您可以初始化 n = 0,或者从 i+1 开始您的内部循环,而不是从 i 开始。在这两种情况下,将我上面提供的片段中的常量更改为 1.