我将在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;
}
我的问题是,更简单的方法是什么?
答案 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;
那就是它!