Beispiel #1
0
  // 重み付けを行い, フラグの初期化を行う 2000.10.24 matono
  public double exec_weight_node(OM_Node node) {
    int objects = 0; // 同階層内のオブジェクト数
    double total = 0; // 同階層内の重みの合計
    double average = 0; // 同階層内の重みの平均

    OM_Leaf leaf = node.body;

    //    System.out.println( "exec_weight_node!!");
    //    System.out.println( );

    while (leaf != null) {

      if (leaf.ap != null) {
        leaf.leaf_flag = false;
        // メディアの場合 type を重みとし利用。
        leaf.weight = (double) (leaf.ap.media.media_type);
        leaf.weight += (double) (leaf.ap.action.action_type) / 10;
        //	System.out.print( leaf.media_atom.name + "["+ leaf.weight + "], ");
        // 同時に合計を計算。
        total += leaf.weight;
      }

      // 子供が存在するか?
      else if (leaf.ap == null) {
        node = leaf.media_atom.node;
        // 再起呼出。averageに下位層の平均が帰ってくる。
        average = exec_weight_node(node);
        node = leaf.node;
        // averageはこのノードの重みになる。
        leaf.leaf_flag = false;
        leaf.weight = average;
        total += average;
        average = 0;
      }

      // 弟に交代。
      if (leaf.nonorder != null) leaf = leaf.nonorder;
      else if (leaf.seq_next != null) leaf = leaf.seq_next;
      else leaf = null;

      // 同階層のオブジェクト数
      objects++;
    }

    // 同階層の平均値を返す。
    return ((double) total / objects);
  }