このオブジェクトがすべてです。
public class Unit {
private String label;
NumberRow numberRow;
Unit(String label){
this.label=label;
numberRow = new NumberRow();
}
....
}
これには、ラベル名と double の配列 (NumberRow()) が含まれます。UnitRow という名前の別のクラスは、これらの Unit の配列です。
public class UnitRow {
Unit[] unitArray;
private int elementsInArray;
Scanner in;
UnitRow(){
unitArray = new Unit[Dataset.numberOfRecords];
elementsInArray = 0;
}
......
}
しかし、もう 1 つのクラス、Leaf を紹介します。これにはユニットが含まれており、クラスター インターフェイスを実装しています。
public class Leaf implements Cluster {
private Unit unit;
Leaf(Unit unit){
this.unit = unit;
}
.......
public UnitRow getUnits() {
UnitRow unitRow = new UnitRow();
unitRow.addLabel(unit.getLabel());
for (int x = 0; x < Dataset.numberOfVariables; x++){
unitRow.addVar(unit.valueOnIndex(x));
}
return unitRow;
}
public boolean hasChildren() {
return false;
}
}
これには Unit が含まれており、関数 UnitRow では、新しい UnitRow が 1 つの Unit だけで作成されます。つまり、クラスが作成されたときに作成されたときに与えられた Unit です。ノードと呼ばれる別のクラス (最後のクラス) もクラスター インターフェイスを実装します。
public class Node implements Cluster{
private Cluster leftChild;
private Cluster rightChild;
Node(Cluster leftChild, Cluster rightChild){
this.leftChild = leftChild;
this.rightChild = rightChild;
}
public UnitRow getUnits() {
return leftChild.getUnits() + rightChild.getUnits();
}
}
ノードには左の子と右の子があります。このような子は、リーフまたは別のノードのいずれかになります。これで、ノードの下にあるすべてのリーフからのユニットの配列を提供する関数が Node にできました。私はJavaに伝えたいと思いました: return leftChild.getUnits() + rightChild.getUnits(); たとえば、leftChild と rightChild が両方ともリーフである場合、それらが返す配列はそのステートメントで一緒に追加されます。ただし、これは正しい方法ではありません。Node の関数 getUnits が最も効率的な方法で Units を含む 1 つの配列を返すようにする最も効率的な方法は何ですか?