私の元のコードでは、ノードをツリーに追加します。私の目標は、ツリーに追加した最後のノードに何とかアクセスすることです(私の考えは、最後のオブジェクト(元の例のノード)を指す別のオブジェクトを作成することでした)。クラス内のオブジェクトのアドレスを引数にコピーして、後でそのオブジェクトに変更を加えることができます
public class RandomSubClass
{
int firstNum;
}
import java.util.LinkedList;
public class RandomClass
{
LinkedList<RandomSubClass> myListOfObjects = new LinkedList<RandomSubClass>();
void addItem(int firstNum, RandomSubClass toBeReturned)
{
RandomSubClass o1 = new RandomSubClass();
o1.firstNum = firstNum;
myListOfObjects.add(o1);
// Here I was thinking that 'toBeReturned' will get same address as
// 'o1', and by changing 'toBeReturned' (in main), values in 'o1' change
//
toBeReturned = o1;
// This following commented code worked,
// but I can't use it in my original code.
//
// The reason I can't use it is because when I add a node to a tree,
// I start at the root and trace the new node's way to a new leaf,
// which makes it hard to do (simply) that.
//
//toBeReturned.firstNum = firstNum;
//myListOfObjects.add(toBeReturned);
}
}
public class Main
{
public static void main(String[] args)
{
RandomClass myList = new RandomClass();
RandomSubClass r1 = new RandomSubClass();
RandomSubClass r2 = new RandomSubClass();
myList.addItem(1, r1);
myList.addItem(2, r2);
// I would like to do that, and see changes in the node in 'myList'
//
r1.firstNum = 10;
r2.firstNum = 20;
}
}
私はツリーに追加した後、ノードについて何かを確認したい、そしてそれは、いくつかの条件を満たしている場合、私は、そのためのフラグを変更したいですノード。
ノードを再トレースすることができます(ルートから開始します)が、ある時点でツリーが大きくなり、時間がかかることがあります。だから私はそれを追加すると、そのノードのアドレスを取得し、私の状態を確認した後、私はそのノード(最後に追加)でフラグを変更することを知って、そのアドレスでフラグを変更することができます。
ありがとうございます。この方法を試してみましたが、うまくいきましたが、すでにノードが正常に挿入されたかどうかを示すブール値フラグを返しています。これが良いアプローチであれば、 'RandomSubClass'を返すことができ、ノードが正常に追加されたかどうかを示すブール値フラグを参照で渡すことができます。 –
@RoronoaZoro私は、単に失敗を示す方法で 'false'を返すことは非常に良いアプローチではないと言いたいと思います。私はJavaライブラリにこれらのメソッドがいくつかあることを知っていますが、そうすると他のものを返すオプションがなくなります。最善の解決策は、障害を示すために例外を使用することです。 'Exception'を拡張したクラスを作成し、' RandomSubClass addItem(int firstNum)throws ItemAdditionFailedException'またはそのようなものを作成します。 – MarioDS
私はツリーに一意のノードを追加しています。「正常に追加されました」というのは、ツリーが変更されたため、同じ値を持つノードがなかったということです。私は後でこの値を使ってより多くのことをします。私はこのケースで例外を使うことはできないと思っています。私が間違っている場合や、自分の状況について別の良い方法があるかどうかを確認してください。 –