如何确定是否存在';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代表什么以及它们的含义。@JFPicardmode
是一个数学术语,指出现的最高值。如果要优化算法,请先对数组排序。这也会让你更容易对代码进行推理。所有这些变量都是索引和计数,所以如果它们有单字母名称就可以了。传统上,密集数学代码的变量名只有一个字母。当名称与问题域的实际实体相对应时,我们倾向于使用较长的名称。
return m;
if (k == 2) {
return "None";
}
return m;