我想知道是否有更好的选择,然后使用这个中断实现。我正在努力提高自己的能力,以下确实有效。只是我一直听说Break;作为一个简单的出路,并产生潜在的意大利面条代码,这些代码在这里没有发生但仍然存在。
public void getWoodSoldRecently(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.WEEK_OF_YEAR, -2);
for(Tree t : theTrees){
if(t.getSimpleDateSold().getTime().after(cal.getTime()) && t.getHasBeenSold()==true){
treesSold.add(t);
System.out.println(t.getTreeId() + " " + t.getTreeType());
}
else{
System.out.println("Nothing sold in the last 2 weeks");
break; //Stop the above
}
}
}
如果没有中断,“过去两周内没有出售任何东西”将输出存储在数组中的金额。
答案 0 :(得分:6)
我怀疑你实际上并不打算在这里打破。当然你只想继续使用剩下的树 - 只是因为你发现一个树与你的条件不符(例如它没有被出售),这是否真的意味着不能在你的收藏中稍后会有任何匹配的东西吗?
无论如何,你的方法显然是奇怪的,因为get
方法不会返回任何东西,而是为现有集合添加值。 那是我要改变的第一件事。
答案 1 :(得分:1)
由于你在休息后没有做任何事情,如果它出现了。你也可以用return来代替它。
public void getWoodSoldRecently(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.WEEK_OF_YEAR, -2);
for(Tree t : theTrees){
if(t.getSimpleDateSold().getTime().after(cal.getTime()) && t.getHasBeenSold()==true){
treesSold.add(t);
System.out.println(t.getTreeId() + " " + t.getTreeType());
}
else{
System.out.println("Nothing sold in the last 2 weeks");
return; //Exit function
}
}
}
我个人没有休息的问题,但是返回会迫使你将代码封装到更多的函数中,总是好。
答案 2 :(得分:0)
根据定义,中断也不错 - 它可能被滥用,但允许使用它的方式。 你可以考虑用回报代替休息。
答案 3 :(得分:0)
我不会在您的示例中使用break
这会导致任何问题。仍然发布一个可能的解决方法(避免休息):
boolean bContinue = true;
int iSize = theTrees.size();
for(int indx=0; indx < iSize && bContinue; indx++){
Tree t = theTrees.get(indx);
if(t.getSimpleDateSold().getTime().after(cal.getTime())
&& t.getHasBeenSold()==true){
treesSold.add(t);
System.out.println(t.getTreeId() + " " + t.getTreeType());
}
else{
System.out.println("Nothing sold in the last 2 weeks");
bContinue = false;//This will stop the loop
}
}
答案 4 :(得分:0)
问题是您使用的foreach循环无法使用条件参数。如果你把它转换成for循环你会更好:
boolean loopContinue = true;
for(int i = 0; i < theTrees.size() && loopContinue; i++) {
Tree t = theTrees.get(i);
if(t.getSimpleDateSold().getTime().after(cal.getTime()) && t.getHasBeenSold()==true){
treesSold.add(t);
System.out.println(t.getTreeId() + " " + t.getTreeType());
}
else{
System.out.println("Nothing sold in the last 2 weeks");
loopContinue = false; //Stop the above
}
}
}
EDIT&amp;澄清:我说“更好”意味着你可以更好地控制你的循环。正如其他人所说,使用break
本身并不是坏事。
答案 5 :(得分:-1)
使用迭代器:
public void getWoodSoldRecently(){
Calendar cal = Calendar.getInstance();
cal.add(Calendar.WEEK_OF_YEAR, -2);
Iterator itr = theTrees.iterator();
boolen b = true;
while (itr.hasNext() && b == true) {
if(t.getSimpleDateSold().getTime().after(cal.getTime()) && t.getHasBeenSold()==true){
treesSold.add(t);
System.out.println(t.getTreeId() + " " + t.getTreeType());
}
else{
System.out.println("Nothing sold in the last 2 weeks");
b = false;
}
}
}