此方法应该通过电视连续剧对象的arraylist进行查看。但是,我的for循环中的j ++给出了死代码错误,并且输入当前未保存在arraylist中的标题会导致无限循环。不知道为什么。 SOS 编辑;设置此作业的讲师不允许使用迭代器
public void deleteseries(Scanner sc){
System.out.println("Enter the Title of the Series you want to Remove");
System.out.println("Cureent Series Stored: ");
for (TV_Series tv:series) {
System.out.println(tv.getTitle());
}
String title_to_delete = sc.nextLine().toUpperCase();
boolean found = false;
do{
for(int j = 0; j < series.size(); j++){
if (series.get(j).getTitle().equalsIgnoreCase(title_to_delete))
{
series.remove(j);
System.out.println("Series Removed");
found=true;
//Jump out of loop
break;
}
else
{
System.out.println("No Results for Title "+title_to_delete);
found = false;
break;
}
}
}while(found==false);
}
答案 0 :(得分:1)
这里有几个相关的问题;我想你可能需要回顾一下循环结构是如何工作的。
您编写了一个应该遍历数组的for
循环;没关系。但是,不是让它迭代,而是在第一次迭代期间将其设置为从循环中断开。我假设你将它包含在一个do-while
循环中,因为你注意到它没有迭代,但只是反复重复循环的第一次迭代。此外,do-while
循环的退出条件将found
转为true
,这就是为什么如果找不到匹配则循环不会退出的原因。
通常,您不需要在for
中附加while
来进行迭代; for
本身就是一个循环结构。您for
不会自行迭代的唯一原因是您输入break
语句;只有在想要中止迭代时才需要使用break
来退出for
循环。因此,break
块中if
可能有意义,但肯定不是else
块。
最后,写入的else
块将在每次迭代时运行(一旦其他问题得到修复);说&#34;找不到匹配&#34;是没有意义的。在每次迭代。如果循环遍历所有迭代而没有找到匹配(即如果if
仍然存在),则可以在<{em} for
循环之后放置found
块以打印错误假)。
答案 1 :(得分:1)
if
和else
部分都是break
内部for
循环。
此外,如果您想查找和删除,请使用以下内容:
另外,我使用了迭代器,因为循环时将修改列表。
public void deleteseries(Scanner sc){
System.out.println("Enter the Title of the Series you want to Remove");
System.out.println("Cureent Series Stored: ");
for (TV_Series tv:series) {
System.out.println(tv.getTitle());
}
String title_to_delete = sc.nextLine().toUpperCase();
boolean found = false;
//do{
for(Iterator<TV_Series> itr = series.iterator(); itr.hasNext();){
TV_Series tvs = itr.next();
if (tvs.getTitle().equalsIgnoreCase(title_to_delete))
{
itr.remove();
System.out.println("Series Removed");
found=true;
//Jump out of loop
break;
}
//else
//{
// System.out.println("No Results for Title "+title_to_delete);
// found = false;
// break;
//}
}
// }while(found==false);
}
答案 2 :(得分:1)
当修改可迭代集合时,我强烈建议使用迭代器来防止&#34; ConcurrentModificationException&#34;。此外,我还删除了一些冗余代码,比如do-while部分,以修复i ++问题和更清晰的代码。检查我的命题:
public void deleteseries(Scanner sc){
System.out.println("Enter the Title of the Series you want to Remove");
System.out.println("Cureent Series Stored: ");
for (TV_Series tv:series) {
System.out.println(tv.getTitle());
}
String title_to_delete = sc.nextLine().toUpperCase();
Iterator<TV_Series> it = series.iterator();
while (it.hasNext()){
TV_Series tmpSeries = it.next();
if (tmpSeries.getTitle().equalsIgnoreCase(title_to_delete)) {
it.remove();
System.out.println("Series Removed");
break;
}
}
}