检查对象是否包含arraylist中的值不起作用

时间:2017-01-09 15:27:34

标签: java arraylist

我有一个arrayList私有ArrayList模块;我想要存储模块对象,然后我想检查是否有一个与插入的模块相同的moduleNummer的对象,这部分工作,当我只输入相同的moduleNummer它工作正常,当我输入第二个(不同)数字它将添加一个带有数字2的新模块,但是当我想在数字2的模块中添加另一个星期它将无法工作,我不明白为什么会发生这种情况

public void addModule(int moduleNummer, int weekNummer, int weekUren) throws ParseException {
     if(Modules.size()==0) {
                    System.out.print("array size == 0");
                    Modules.add(new Module(moduleNummer));
                    Modules.get(0).addWeek(new ModuleWeek(weekNummer,weekUren));
                    return;
     }
     else{
        for (int i = 0; i < Modules.size(); i++) {
            System.out.print("entered loop \n");
            System.out.print("arraySize:"+ Modules.size() + "\n");
            System.out.print("selected array:"+Modules.get(i).getModuleNummer() + "\n");
            System.out.print("inserted:"+moduleNummer  + "\n");
            int inArrayModuleNummer = Modules.get(i).getModuleNummer();
            if (inArrayModuleNummer == moduleNummer ) {

                System.out.print("inserted Module number excists \n");
                Modules.get(i).addWeek(new ModuleWeek(weekNummer, weekUren));
                return;
            }
            else {
                System.out.print("inserted module number does not excist and the arraySize != 0");
                Module m = new Module(moduleNummer);
                m.addWeek(new ModuleWeek(weekNummer, weekUren));
                Modules.add(m);
                return;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你在循环中检查的逻辑是不正确的。

    for (int i = 0; i < Modules.size(); i++) {
        ...
        if (inArrayModuleNummer == moduleNummer ) {

            System.out.print("inserted Module number excists \n");
            Modules.get(i).addWeek(new ModuleWeek(weekNummer, weekUren));
            return;
        }
        else {
            System.out.print("inserted module number does not exist and the arraySize != 0");
            Module m = new Module(moduleNummer);
            m.addWeek(new ModuleWeek(weekNummer, weekUren));
            Modules.add(m);
            return;
        }
    }

此处,如果Modules的第一个模块不匹配,您认为第一次迭代后模块编号不会在Modules中退出。只有在遍历所有元素时才应该结束这一点。

迭代后应移动else部分中的代码。不再需要return

    for (int i = 0; i < Modules.size(); i++) {
        ...
        if (inArrayModuleNummer == moduleNummer ) {

            System.out.print("inserted Module number excists \n");
            Modules.get(i).addWeek(new ModuleWeek(weekNummer, weekUren));
            return;
        }
    }
     // if you are here, the module number has no matching            
    System.out.print("inserted module number does not excist and the arraySize != 0");
    Module m = new Module(moduleNummer);
    m.addWeek(new ModuleWeek(weekNummer, weekUren));
    Modules.add(m);