如何解决虽然循环在Java
无论他的输入是否为真,我的while循环都返回true。因此它使用dao中的id方法检查导演是否存在。一旦更改为false且id不存在,则while循环应结束。 id从1开始进行第一次迭代。 d F Name和d S Name的第一个ID为1。如果当前导演名称与正在创建的新导演不同,则应将ID递增1。如果它们不匹配,则应简单返回“真正”。如果是else选项,那 应该只将id再增加1并返回循环。这应该一直持续到第一个不存在的ID或找到重复的名称为止。
在我看来,如果if语句在第一个if语句中有条件,它并没有运行,而是直接跳到嵌套在第一个if语句中的if语句。我已经尝试过使用do ... while()遍历循环,仅当语句和while语句没有ifs且没有更改时。
This is the loop I am working on.
public boolean checkDirectorNameIsNotDuplicate(Director director) {
int id = 1;
String dFName;
String dSName;
while(directorDao.existsById(id)==true) {
dFName = directorDao.getDirectorFirstNameById(id);
dSName = directorDao.getDirectorSurnameById(id);
if (!director.getDirectorFirstName().equals(dFName) && !director.getDirectorSurname().equals(dSName)){// if directorFirstName is not equal to dFName AND directorSurname is not equal to dsname
id++; //move to next Id
System.out.println(id);
}
else {
if (director.getDirectorFirstName().equals(dFName) && director.getDirectorSurname().equals(dSName)) {
return true;
}
else {
id++;
}
}
}
return false;
}
解决方法
从逻辑上分析,if-else语句中的某些内容是多余的。最好删除一些语句,然后更改为下面的代码,只需对它们进行简单的修改即可。
此外,您的变量id
没有结束条件,可能导致无限循环。
public boolean checkDirectorNameIsNotDuplicate(Director director) {
int id = 1;
String dFName;
String dSName;
while(directorDao.existsById(id)) {
dFName = directorDao.getDirectorFirstNameById(id);
dSName = directorDao.getDirectorSurnameById(id);
if (director.getDirectorFirstName().equals(dFName) && director.getDirectorSurname().equals(dSName)) {
return true;
}
else {
id++;
System.out.println(id);
// add condition here to void an infinite loop
if (/*something to do with id*/) {
break;
}
}
}
return false;
}
,
我会重写整个方法。如我的评论中所述,如果不存在ID = 1的导演,那么您就永远不会进入。以同样的方式,如果您的ID到x-1,则ID x不会与任何导演关联,并且从x + 1开始,您就拥有某些导演(即,如果ID并非全部重叠),则永远不会检查最后一个。 我想做的是:
- 在DirectorDao中使用新方法检索列表中的所有董事,例如
directorDao.list()
- 在列表中重复。
代码示例
public boolean checkDirectorNameIsNotDuplicate(Director director) {
int id = 1;
String dFName;
String dSName;
List<Director> directors=directorDao.list(); //new method in directorDao
if (directors!=null){
for(Director d:directors){
if (director.getDirectorFirstName().equals(d.getDirectorFirstName()) && director.getDirectorSurname().equals(d.getDirectorSurname())) {
return true;
} //closes if
}// closes for
return false;
} //end method
此外,为什么不直接在SQL中进行检查,例如在dao中添加方法checkDirector(name,surname)
,如果找到具有名称和姓氏的导演,该方法将返回true?该查询非常简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。