更新ArrayList中的用户定义对象

时间:2014-12-13 13:02:26

标签: java arraylist

我正在使用类和数组列表,我想更新ArrayList中的元素(对象)。 拳头我用ID号搜索了它。然后我使用类中的方法重新设置对象成员,该方法提示用户输入..

问题是,它更新了列表中的所有对象而不是特别是对象。

我的工作

if (studentList.isEmpty())
    System.out.println("\t\tNO DATA TO UPDATE !!");
else {
    try {
        System.out
                .print("\n\tTo Update info, Please Enter Students ID: ");
        System.out.flush();
        searchID = obj.readLine();
        for (Iterator<Student> it = studentList.iterator(); it
                .hasNext();) {
            Student S1 = it.next();
            if (searchID.equals(S1.getID()))
                System.out.print("\n\tEnter New Data: ");
            S1.setting();
        }
    } catch (Exception e) {
        // empty
    }
}

它要求更新所有对象而不是一个。更新有效,但不是我想要的方式...

3 个答案:

答案 0 :(得分:2)

你的病情应该有阻滞:

                        if (searchID.equals(S1.getID())) {
                            System.out.print("\n\tEnter New Data: ");
                            S1.setting();
                        }

否则,无论条件的结果如何,您总是会调用S1.setting(),因为如果没有花括号,if语句只会控制是否执行System.out.print("\n\tEnter New Data: ");。< / p>

答案 1 :(得分:1)

我已将它通过我的代码清理程序,下面显示的内容如下:

if (studentList.isEmpty()) {
    System.out.println("\t\tNO DATA TO UPDATE !!");
} else {
    try {
        System.out.print("\n\tTo Update info, Please Enter Students ID: ");
        System.out.flush();
        searchID = obj.readLine();
        for (final Iterator<Student> it = studentList.iterator(); it.hasNext();) {
            final Student S1 = it.next();
            if (searchID.equals(S1.getID())) {
                System.out.print("\n\tEnter New Data: ");

                S1.setting();
            }
            // >>> this is where S1.setting() went wrong, moved up <<<                
        }
    } catch (final Exception e) {
        // empty
    }
}

最重要的变化是所有代码块都带有大括号{}。如果这样做,则在执行语句时会变得非常清楚。没有它,只执行ifelse子句后面的第一个语句。这使得编码错误很容易成为问题中的错误。

答案 2 :(得分:0)

如果要有条件地执行多行代码,则应将所有代码放在{...}之间。如果你这样离开,只有第一个将取决于条件......