2011-12-20 24 views
-1

特定の条件に基づいてビンパッキングを実行するアルゴリズムがあります。アルゴリズムの流れは、読者が理解するために少し複雑であることがわかります。Javaの条件付きビンパッキングの簡略化されたプロセス

以下に、開発した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 - >現時点

エティム - >終了時間

LIM - >リミット

+0

ここで、 'k'と' j'の値は入りますか?それらがクラス変数である場合、彼らは信じられないほど名付けられていません... – corsiKa

+0

@glowcoder:質問を編集... – thinkcool

+2

これは幾分主観的な問題だと私は知っていますが、私はあなたがラインの最後に、それらを自分の行に置くのではなく、私が見るのは、それが{{{{{{{{{{そのメモでは、いくつかの方法を抽出する必要があります。 –

答えて

1

の上から物事のカップル私の頭:

  1. 可変名より表現力豊かでなければならない。省略しないでください。特に1,2文字を保存しないようにしてください(例:ptimchk()
  2. 括弧を閉じる前、括弧を閉じる前、演算子の前後にスペースを入れてください。それはうんざりしているように聞こえるが、あなたのコードがどれだけ読みやすくなるかは驚かれるだろう。
  3. 例えばif (bool == false)if (!bool)
  4. が適切{}ブロックを使用し、ワンライナーif Sまたはwhileのを避けてください。
  5. あなたがする必要がない場合はありません事前に宣言した変数を実行しなければなりません(不要なブール値の比較を避けてください。
  6. ラベルの代わりに、あなたは、ネストされたループを持っているダブルブレイク構造の
  7. break
  8. そして、すべてのほとんど:要因これらのループのいくつかの実施方法に
+0

あなたの提案をお寄せいただきありがとうございます。それらのものを試してみてください。 – thinkcool

1

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

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

+0

私はjava.util.Mapを使用していません.. – thinkcool

関連する問題