找到int数组的模式时要返回什么?

时间:2013-11-15 02:38:59

标签: java arrays return mode

顺便说一句,这是针对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和循环?还是没有名单的方式?再次感谢。

2 个答案:

答案 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