在Java中设计一个方法,它接收2D数组并找到每列最重复的值

时间:2015-07-27 13:31:19

标签: java multidimensional-array

我将在Java中设计一个接收2D数组的方法,并为每列找到最重复的值。因此,此方法的输出是一维数组,其中包含二维数组中每列的最重复值。

可以这样总结,

  • 计算每列的重复值。
  • 将这些值保存在一个数组中,其中输出数组中的每个值代表二维数组列中重复次数最多的值

这是我的代码,我从那开始

 static int  choseAction(int[][] Actions, int ColNumber) {
    int action = 0;
    int c = 0;
    int d = 0;
    int n = 0;      
    for (int i = 0; i < Actions.length; i++) {
        for (int j = 0; j < Actions[0].length; j++) {

            if (Actions[ColNumber][i] == 1) {
                c = +1;
            } else if (Actions[ColNumber][i] == -1) {
                d = +1;
            }

            else if (Actions[ColNumber][i] == 0) {
                n = +1;
            }
        }

    }

    action = ActionCompare(c, d, n);

    return action;
}

static int ActionCompare(int a, int b, int c) {

    int r;

    if ((a > b) && (a > c)) {

        r = a;
        System.out.println("\n cc ");

    } else if ((b > a) && (b > c)) {

        r = b;
        System.out.println("\n dd ");

    } else {

        r = c;
        System.out.println("\n do nn ");

    }

    return r;

}

我的问题是,更简单的方法是什么?

2 个答案:

答案 0 :(得分:0)

您可以对列中的所有值求和,这样您就可以FUNCTION_DEF s更多或1 s但您无法告诉零。做你以前为零做的事情,你的代码变成全长的2/3。

-1

答案 1 :(得分:0)

以下是答案here

的方法

使用HashMap<Integer, Integer>

对于多次出现,增加整数键的对应值;

public int[] static getFrequencies(int[][] Actions){

int[] output = new int[Actions.length]
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int j = 0; j < Actions.length; j++){
    for (int i : Actions[j]) {
        Integer count = map.get(i);
        map.put(i, count != null ? count+1 : 0);
    }

然后将具有最大频率的数字从哈希映射附加到输出数组:

    output[j] = Collections.max(map.entrySet(),
        new Comparator<Map.Entry<Integer, Integer>>() {
        @Override
        public int compare(Entry<Integer, Integer> o1, Entry<Integer,     Integer> o2) {
            return o1.getValue().compareTo(o2.getValue());
        }
    }).getKey().intValue();
}

最后返回输出:

return output;

那就是它!