java - 检查对象是否包含数组列表中的值不起作用

标签 java arraylist

我有一个 arrayList 私有(private) 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;
            }
        }
    }
}

最佳答案

我认为您检查循环的逻辑不正确。

    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部分中的代码。不再需要返回

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

关于java - 检查对象是否包含数组列表中的值不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551321/

相关文章:

java - 删除内容并显示JAVA中的所有内容

java - Android:如何将 HttpResponse 转换为 List<Object>

java - 静态成员序列化

java - URL问题中的Spring和德文字母

java - 有没有一种 Spring 方法来检查网页是否仍然存在?

java - 如何读取 .pem 文件以获取私钥和​​公钥

java - 将 ArrayList 从一个方法传递给同一个类中的另一个方法?

java - 搜索对象的数组列表不起作用

java - 将原始 vector 转换为类型安全列表(Arraylist)的最佳方法是什么

java - 在文本区域显示OutputStream(System.out)