0

この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
        }
    }
}

休憩がなければ、「過去2週間に何も販売されなかった」と、アレイに格納されている量が出力されます。

4

6 に答える 6

6

とにかくここで実際に壊れたくないのではないかと思います。確かに、残りの木をそのまま使い続けたいと思います-自分の状態に合わない木が1つ見つかったからといって(たとえば、販売されていない)、それは本当に、後で一致する木がないことを意味しますコレクション?

あなたのメソッドは、何も返さgetないが、既存のコレクションに値を追加するメソッドであるという点で、とにかく明らかに奇妙です。それが私が最初に変更することです。

于 2012-11-08T18:05:07.217 に答える
1

あなたは休憩の後に何かをすることをやめているので、それが起こった場合。返品に置き換えることもできます。

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
    }
}

}

個人的にはブレークの問題はありませんが、returnを指定すると、コードをより多くの関数にカプセル化する必要があります。これは常に問題ありません。

于 2012-11-08T18:05:00.167 に答える
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
        }
    }
}

編集と明確化:私は「より良い」と言います。これは、ループをより細かく制御できることを意味します。他の人が言っているように、使用breakは本質的に悪いことではありません。

于 2012-11-08T18:06:42.597 に答える
0

ブレークは定義上悪くはありません-誤用される可能性がありますが、使用方法は許可されています。休憩をリターンに置き換えることを検討できます。

于 2012-11-08T18:04:14.707 に答える
0

私はbreakあなたの例でこれを使用すると問題が発生することはありません。まだ1つの可能な回避策を投稿しています(休憩を避けてください):

   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
    }
}
于 2012-11-08T18:04:35.190 に答える
-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;
        }
    }
}
于 2012-11-08T18:11:44.477 に答える