我在这里有这个方法,检查数组中的Mode(最常见的元素)。虽然有一点需要考虑,但我不知道如何去做。例如:如果我的数组是{1,2,2,3,3,5} ..我需要打印出'NaN',因为2和3都出现了2次。任何有关如何添加此内容的帮助表示赞赏。
我的代码:
public double mode() {
double maxValue=0, maxCount=0;
boolean flag=false;
for (int i = 0; i < data.length; ++i)
{
double count = 0;
for (int j = 0; j < data.length; ++j)
{
if (data[j]==(data[i])) ++count;
}
if (count > maxCount)
{
if(count>1)flag = true;
maxCount = count;
maxValue = data[i];
}
}
if(flag)
{
return maxValue;
}
else return 0.0;
}
答案 0 :(得分:0)
当您找不到模式时看到返回0.0
,当您调用mode()
函数时如何使用此三元组:
final double mode = this.mode();
System.out.println(mode == 0.0 ? "NaN" : mode);
如果您愿意,可以将其完整填写:
final double mode = this.mode();
if(mode == 0.0)
{
System.out.println("NaN");
}
else
{
System.out.println(mode);
}
答案 1 :(得分:0)
我认为您当前的代码并未完全给出您想要的结果。
以下是更新的代码段:
public double mode() {
// Sort array
Arrays.sort(data);
double maxValue = 0.0, maxCount = 0.0;
for (int i = 0; i < data.length; ++i) {
// Count number of elements with same value
int count = 0;
int index = i;
while (index < data.length) {
if (data[i] == data[index]) {
count++;
index++;
} else {
break;
}
}
if (count > maxCount) {
maxCount = count;
maxValue = data[i];
} else if (count == maxCount) {
maxCount = count;
maxValue = 0.0;
}
}
return maxValue;
}
然后,从您致电mode()
的地方开始,执行以下操作:
double m = mode();
System.out.println(m == 0.0 ? "NaN" : m);