我看到的所有问题都是关于使用返回值,而我想问的是不使用它。 我有一个获取书名的方法,并从一系列书籍(图书馆)中删除所有具有相同标题的书籍。
我写了另一种获取书名的方法,并从数组中删除了第一本给出相同标题的书(不是100%完成因为问题是关于它):
public Book remove(String name)
{
Book bookRemoved= null;
for (int i=0; i<_noOfBooks; i++)
{
if (name.equals(_lib[i].getTitle()))
{
bookRemoved= new Book (_lib[i]);
_lib[i]=null;
closeGap();
}
}
return bookRemoved;
}
我有另一个私有方法,其目的是关闭数组中创建的间隙,并返回已删除的图书数量:
//counts the amount of books removed and closes the gaps casued by removing them
private int closeGap()
{
int count=0;
//number of nulls
for (int i=0; i<_noOfBooks;i++) //run throughout array to find # of
nulls
{
if (_lib[i]==null);
count++;
}
//closing gaps
for(int i=0; i<_noOfBooks-1;i++)
{
int nextCell=i+1;
while (_lib[nextCell]== null) //find the next cell after _lib[i]
that isn't null
nextCell++;
if (_lib[i]== null)
{
_lib[i]= _lib[nextCell]; //fill nulled cell with nextCell-
temporarily alliasing
_lib[nextCell]=null; //remove nectCell value -remove
alliasing
}
}
return count;
}
当我想使用closeGap方法时,我得到返回的值1,但是我无法找到一种方法来使用它来摆脱for循环而不会强迫它。 我必须使用返回的值吗?有没有办法摆脱循环使用它?
答案 0 :(得分:1)
您可以使用break
退出for循环。 E.g。
public Book remove(String name)
{
Book bookRemoved= null;
for (int i=0; i<_noOfBooks; i++)
{
if (name.equals(_lib[i].getTitle()))
{
bookRemoved= new Book (_lib[i]);
_lib[i]=null;
if (closeGap() == 1) {
break;
}
}
}
return bookRemoved;
}
答案 1 :(得分:0)
你会做如下的事情。对于要删除的值集,它有点模糊。如果你想离开循环,如果返回0只需替换
closeGap();
与
if(closeGap()==0)
break;