2

キーが文字列で、値がオブジェクト (シグナル) である HashMap を使用しています。Map を繰り返し処理しているときに、ファイルに書き込む前にオブジェクトの属性の 1 つを編集できますか?

これが私のコードです

public void createFile(HashMap<String , Signal> map, final BufferedWriter buffwriter, long totalSize) {
    final Iterator<String> iterator = map.keySet().iterator();
    while(iterator.hasNext()) {
       String messageName = iterator.next();
       Signal signal  = map.get(messageName);
       signal.setBandwidth((signal.getSize()/totalSize)*100);
       csvOutput.write(signal.getSource());
       csvOutput.write(signal.getName());
       csvOutput.write(signal.getComponent());
       csvOutput.write(Integer.toString(signal.getOccurance()));
       csvOutput.write(Integer.toString(signal.getSize()) );
       csvOutput.write(Float.toString(signal.getBandwidth()));
       csvOutput.endRecord();               
    }
 }

Signal.java

  public class Signal implements Comparable<Signal>{    
      String name;
      float bandwidth;

      public void setName(String name){
       this.name = name;
   }
      public void setBandwidth(float bandwidth){
       this.bandwidth  = bandwidth;
   }

       public String getName(){
       return this.name;
   }

       public float getBandwidth(){
       return this.bandwidth;
   }
        @Override
   public int compareTo(Signal signal) {
       return 1;
   }

上記のコードでは、messagName をマップ内の各キーのキーとして使用し、その値を取得します。帯域幅属性を設定してファイルに書き込もうとしましたが、帯域幅が更新されていません。

どうすればできますか?Entry を削除し、反復中に新しい値で別のエントリを追加する唯一のオプションはありますか?

前もって感謝します

4

2 に答える 2

2

推測させてください、あなたの帯域幅は 0 のままですか? それは計算方法に原因があります。getSize() は int/long を返し、totalSize は int/long であると想定しています。これにより、計算の結果が得られます

(signal.getSize()/totalSize)*100

intでもあります。次のことを試してください。

(signal.getSize() / (float) totalSize) * 100

現在、オペランドの 1 つが float であるため、計算結果も float になります。これで問題が解決することを願っています。

こちらもご覧ください

于 2013-09-24T10:26:39.267 に答える