<Integer> 按索引比较列表


List<Integer> listOne= new ArrayList<>();
listOne.add(10);
listOne.add(2);
listOne.add(3);
//Second Array
List<Integer> listTwo= new ArrayList<>();
listTwo.add(3);
listTwo.add(7);
listTwo.add(1);

我想比较两个列表并根据哪个值更大来点listOnelistTwo

[10, 2, 3] compare to [3, 7, 1]
if listOne.get(0) > listTwo.get(0) //add one point to listOne
if listOne.get(0) < listTwo.get(0) //add one point to listTwo

这是我测试的代码

static List<Integer> compareList(List<Integer> a, List<Integer> b) {
ArrayList<Integer> output = new ArrayList<>();
output.add(0, 0);
output.add(1, 0);
int out = output.get(0);
int out2 = output.get(1);
for (int i = 0; i < a.size(); i++) {
if (a.get(i) > b.get(i)) {
out = out + 1;
} 
if (a.get(i) < b.get(i)) {
out2 = out2 + 1;
} 
}
output.add(0, out);
output.add(1, out2);
return output;
}

它有效,但它没有输出预期的答案

预期输出 : 2 1 输出 AM 得到 : 2 1 0 0

你在List上加了两个0,然后在List的开头加上了两个数字,除了0s。

删除以下语句:

output.add(0, 0);
output.add(1, 0);

并保持这些陈述不变:

output.add(0, out);
output.add(1, out2);

或者只是更改这些语句:

output.add(0, out);
output.add(1, out2);

自:

output.set(0, out);
output.set(1, out2);

当你这样做时

output.add(0, out);
output.add(1, out2);

将项目添加到索引 0 和 1,这会将先前输入的零推送到索引 2 和 3。output现在[2, 1, 0, 0].

删除

output.add(0, 0);
output.add(1, 0);

并将outout2初始化更改为

int out = 0;
int out2 = 0;

现在您也不需要按索引添加结果

output.add(out);
output.add(out2);

如果删除:

output.add(0, 0);
output.add(1, 0);

工程:

static List<Integer> compareList(List<Integer> a, List<Integer> b) {
ArrayList<Integer> output = new ArrayList<>();
int out = 0;
int out2 = 0;
for (int i = 0; i < a.size(); i++) {
if (a.get(i) > b.get(i)) {
out = out + 1;
}
if (a.get(i) < b.get(i)) {
out2 = out2 + 1;
}
}
output.add(0, out);
output.add(1, out2);
return output;
}

ArrayList 文档说:

在此列表中的指定位置插入指定的元素。 移动当前处于该位置的元素(如果有(和任何 右侧的后续元素(在其索引中添加一个元素(。

因此,使用语句output.add(0, out)output.add(1, out2),您只需在列表中的 0 和 1 位置添加项目,向下推列表中已有的内容(即值 0 和 0 移动到第三个和第四个位置(。

另一种方法是按如下方式使用HashMap:

static List<Integer> compareList(List<Integer> a, List<Integer> b) {
HashMap<Integer, Integer> output = new HashMap<>();
output.put(0, 0);
output.put(1, 0);
int out = output.get(0);
int out2 = output.get(1);
for (int i = 0; i < a.size(); i++) {
if (a.get(i) > b.get(i)) {
out = out + 1;
}
if (a.get(i) < b.get(i)) {
out2 = out2 + 1;
}
}
output.put(0, out);
output.put(1, out2);
return new ArrayList(output.values());
}

最新更新