顺便说一句,这是针对JAVA编程的。
所以,我正在尝试编写一个方法,它将在数组中返回最频繁的int或int。我已经设置了一个完整的类来查找平均值,总和等,但这种特定的方法有点棘手。到目前为止我的代码是:
public int[] modeOfData()
{
List<Integer> modes = new ArrayList<Integer>( );
int maxCount=0;
for (int i = 0; i < data.length; ++i){
int count = 0;
for (int j = 0; j < data.length; ++j){
if (data[j] == data[i]) ++count;
}
if (count > maxCount){
maxCount = count;
modes.clear();
modes.add( data[i] );
} else if ( count == maxCount ){
modes.add( data[i] );
}
}
return modes.toArray( new Integer[modes.size()] );
}
此代码的返回部分是唯一具有语法错误的部分。语法错误读取:不兼容的类型。它突出了括号中的部分。我做错了什么,我必须编辑什么?谢谢!有没有更简单的方法来编写这个只有if-elses和循环?还是没有名单的方式?再次感谢。
答案 0 :(得分:1)
OP写道:
语法错误读取:不兼容的类型。它突出了该部分 括弧。我做错了什么,我必须编辑什么?
忽略其他问题并对您的实际算法进行了可能的改进,您的函数被声明为返回int[]
,但List<Integer>.toArray(Integer[])
返回Integer[]
,这不是int[]
您需要将函数声明为返回Integer[]
(可能是最简单的情况),或手动创建int[]
并将Integer
项复制到其中,取消装箱一次一个(或者您可以使用Guava我认为的Ints.toArray()
),例如
/**
* Convert collection of Integers to an int array.
* @param integers Collection of Integers.
* @return Array of ints, in same order as collection.
* @throws NullPointerException if integers is null.
*/
static final int[] toIntArray (Collection<Integer> integers) {
int index = 0, array[] = new int[integers.size()];
for (Integer integer:integers)
array[index ++] = integer;
return array;
}
前一个选项(返回Integer[]
)的奖励副作用是,如果您愿意,可以使用通用类型而不是Integer
并与.equals()
进行比较并支持使用正确实现的.equals()
查找任何对象集合的模式。
OP写道:
有没有更简单的方法来编写这个只有if-elses和循环?还是没有名单的方式?
一种选择是使用Map<Integer,Integer>
将元素值映射到它们的计数。在浏览输入列表并制表计数后,您将拥有一个包含每个元素及其发生次数的地图。你有一些选择(例如跟踪最大值,或者之后找到它,或者按照它们的值对地图条目列表进行排序)以提取最大数量,我将把它作为练习留给你。
答案 1 :(得分:1)
在方法中将返回类型从int[]
更改为Integer[]
。
public Integer[] modeOfData()
方法toArray
将返回通用类型数据。类型int[]
不是通用的,这就是“语法错误读取:不兼容类型”的原因。
您应该使用 Integer[]
来改变语法错误。
以下是来自toArray
的{{1}}方法的源代码。
List