-1

特定の条件に基づいてビンパッキングを行うアルゴリズムがあります。読者が理解するには、アルゴリズムのフローが少し複雑であることがわかりました。

以下に、開発されたJavaコードを示します。このコードのはるかに単純化された代替フローはありますか?

void binpack() {
boolean set=false, cmap=false;
        while(set==false) {
            set=true;
            cmap=false;
            pack[k.cnt]=new bins(k.lim, k.ptim);
            for(int i=0;i<tot;i++) {           
                int s1,s2;
                if(jm[i][1]==0) {
                    s1=jm[i][0]; 
                    set=false;

                    else if(pack[k.cnt].pushk<k.lim) {
                        for(int j=0;j<pack[k.cnt].pushk;j++) {
                            s2=pack[k.cnt].binjm[j][0];
                            for (Iterator<Integer> g= list[s1].iterator(); g.hasNext();) {

    }
}

ノート:

ptim->現在の時刻

etim->終了時間

lim->制限

4

2 に答える 2

1

私の頭のてっぺんからいくつかのこと:

  1. 変数名はより表現力のあるものにする必要があります。省略しないでください。特に、1文字または2文字を保存しないでください(ptimchk():)
  2. 括弧を開いた後と閉じる前、演算子の後と前などにスペースを入れます。くだらないように聞こえますが、コードがどれほど読みやすくなるかに驚かれることでしょう。
  3. 不要なブール値の比較は避けてください(たとえばif ( bool == false )if ( !bool )
  4. ワンライナーifまたはを避けwhile、適切な{}ブロックを使用してください。
  5. 必要がない場合は、変数を事前に宣言しないでください。
  6. ネストされたループにあるダブルブレーク構造の代わりに break、ラベルに。
  7. そして何よりも、これらのループのいくつかをメソッドに分解します。
于 2011-12-20T22:05:16.583 に答える
1

まず、入力を節約するためだけに変数を省略しないでください。これにより、そのような難読化可能なコードがわかりにくくなります。

次に、java.util.Mapについてすでに聞いたことがありますか?

于 2011-12-20T22:06:02.013 に答える