// 重み付けを行い, フラグの初期化を行う 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); }