我正在使用类和数组列表,我想更新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
}
}
它要求更新所有对象而不是一个。更新有效,但不是我想要的方式...
答案 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
}
}
最重要的变化是所有代码块都带有大括号{}
。如果这样做,则在执行语句时会变得非常清楚。没有它,只执行if
或else
子句后面的第一个语句。这使得编码错误很容易成为问题中的错误。
答案 2 :(得分:0)
如果要有条件地执行多行代码,则应将所有代码放在{...}之间。如果你这样离开,只有第一个将取决于条件......