如何确定java中的数组中是否没有模式?

时间:2015-12-06 20:46:57

标签: java string mode

我已经编写了代码来查找数组中的模式(最常出现的值)。如果数组中有一个模式(或多个模式),程序运行正常。但如果没有模式,我的代码会输出整个数组。如果没有模式,我只想打印“无”。

这是我找到模式的方法代码:

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));

1 个答案:

答案 0 :(得分:2)

从你的代码和你的解释我假设模式是&#34;最常见的元素,至少发生两次&#34;。在这种情况下,您的代码缺失的是&#34;至少两次&#34;部分。您的代码目前只查找最常出现的所有元素,显然对于没有元素出现的数组至少两次返回整个数组是正确的。

要解决此问题,请更改最后一行:

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