假设我有一个包含3个整数的数组。我希望能够使用if语句或for循环从这些数组中获取这些结果。
[0,1,2] = 0 equal
[0,1,0] = 2 equal
[0,0,0] = 3 equal
这是我到目前为止所做的工作,但我认为可以简化。
int numequal = 0;
if(intarr[0] != null && intarr[1] != null && intarr[0].numequals(intarr[1])) {
numequal++;
}
if(intarr[0] != null && intarr[2] != null && intarr[0].numequals(intarr[2])) {
numequal++;
}
if(intarr[1] != null && intarr[2] != null && intarr[1].numequals(intarr[2])) {
numequal++;
}
if(numequal == 1) {
numequal = 2;
}
另外,我试图保持基本。也许只是为了循环。没有哈希集或字典。
答案 0 :(得分:2)
我认为这是最简单的方式(有些人可能会有所不同):
int[] x = { 1, 1, 2, 4, 6, 7, 5, 6, 4, 2, 3, 1, 6, 6, 5, 6, 5, 6, 4, 5, 9,
7, 8, 6, 5, 4, 6 };
int rep = 0;
int finalc = 0;
for (int i = 0; i < x.length; i++) {
int basec = 0;
for (int j = 0; j < x.length; j++) {
if (x[i] == x[j]) {
basec++;
}
}
if (basec > finalc) {
finalc = basec;
rep = x[i];
}
}
System.out.println("The number " + rep + " is repeated " + finalc +" times");
这将打印:
The number 6 is repeated 8 times
答案 1 :(得分:1)
这是我的解决方案。这不简单但非常有效。目前它也计算空元素,如果不合需要,可以很容易地修复它。
Integer[] a = { null, 2, 1, null, 0, 1 };
Arrays.sort(a, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
return o1.compareTo(o2);
}
});
// [null, null, 0, 1, 1, 2]
int n = 0;
Integer prev = null;
Boolean first = null;
for (Integer e : a) {
if (first != null && (e == prev || e != null && e.equals(prev))) {
if (first == Boolean.TRUE) {
n += 2;
first = Boolean.FALSE;
} else {
n++;
}
} else {
first = Boolean.TRUE;
}
prev = e;
}
System.out.println(n);
答案 2 :(得分:1)
您可能正在寻找非常简单的解决方案,所以我尝试优化您的代码:
int[] intarr = {'0','1','2'};
int numequal = 0;
if(intarr[0] == intarr[1] || intarr[0] == intarr[2] ){
numequal++;
}
if( intarr[1] == intarr[2]){
numequal++;
}
if (numequal > 0 ){
numequal++;
}
如果您的数组声明为int[]
,则无需检查nulls
intarr[1] != null
。
如果未设置某项,则默认为0
答案 3 :(得分:0)
这是一个算法问题,可以优化.....
我会使用一个非同步的键值存储,对于我将int作为字符串的键,为他的计数值。
Frtst你会尝试得到它:hashMap.get(“0”),如果它返回null,而不是计数为0,而不是把它放回去:hashMap.put(“0”,new Integer(1))
除非你不需要,否则使用hashMap的unsynchronezed版本,用谷歌搜索它!
答案 4 :(得分:0)
你可以使用Array.sort并很好地计算它们:
int[] a = {0,1, 2, 1, 3, 0, 1 };
int size = 0;
int counter = 0;
//sort it and you will get all the equal inters in a sequance.
Arrays.sort(a);// {0,0,1,1,2,3}
for(int i = 1; i < a.length; i++){
if ( a[i-1] == a[i]){
counter++;
if(counter > size){
size = counter;
}
}else{
counter = 0;
}
}
return size;