如何确定是否存在';java中数组中的模式是什么?

如何确定是否存在';java中数组中的模式是什么?,java,string,mode,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

我已经编写了在数组中查找模式(最常出现的值)的代码。如果阵列中有一个模式(或多个模式),程序工作正常。但是如果没有模式,我的代码会打印出整个数组。如果没有模式,我只希望它打印“无”

以下是查找模式的方法代码:

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

根据您的代码和解释,我假设mode是“至少出现两次的最常见元素”。在本例中,您的代码缺少的是“至少两次”部分。您的代码目前只查找最频繁出现的所有元素,显然对于没有元素出现至少两次的数组,返回整个数组是正确的

要修复此问题,请将最后一行更改为:

return m;


请注意,我将
k
2
进行比较,而不是与
1
进行比较。这是因为代码中存在另一个问题,这是由以下事实引起的:您将
n
初始化为
1
,然后按等于
i
-th元素的元素数递增,包括
i
-th元素。因此,如果元素出现一次,
n
将等于
2
,而不是
1
,相应地,
k
。因此,为了使代码更干净,您可以初始化
n=0
,或者从
i+1
开始内部循环,而不是从
i
开始。在上述任何一种情况下,请将我提供的截图中的常数更改为
1

什么是模式?请使用有意义的变量名称。正如本文所述,很难知道a、m、k、n、i代表什么以及它们的含义。@JFPicard
mode
是一个数学术语,指出现的最高值。如果要优化算法,请先对数组排序。这也会让你更容易对代码进行推理。所有这些变量都是索引和计数,所以如果它们有单字母名称就可以了。传统上,密集数学代码的变量名只有一个字母。当名称与问题域的实际实体相对应时,我们倾向于使用较长的名称。
return m;
if (k == 2) {
    return "None";
}
return m;