按索引比较List <Integer>

时间:2019-12-24 12:05:25

标签: java loops for-loop arraylist compare

    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   输出越来越:2 1 0 0

4 个答案:

答案 0 :(得分:4)

您要在0上添加两个List,然后在List的开头添加两个数字,除了0

删除以下语句:

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);

答案 1 :(得分:2)

这样做的时候

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);

答案 2 :(得分:1)

如果您删除:

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;
}

答案 3 :(得分:0)

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());

}