Java初心者です。
学習中に躓いてしまったので、ご教示いただければと思います。
Testという1つのクラスを作成し、
そこから複数のインスタンスを作成します。
Test test1 = new Test();
Test test2 = new Test();
Test test3 = new Test();
元のTestクラスの中に、
public void addSub(Test child)
という、引数に指定したインスタンスを子に登録するメソッドを用意します。
実際に使うときは、
test1.addSub(test2);
とすれば、test1の子にtest2が登録されるようにしたいのです。
基本的にサブクラスにするには、クラスを作る段階でextendsを用いるイメージなので、同じクラスの別インスタンスを親子関係にする、というのがよく分かりません。
このプログラムの目的は、最終的に一番親となったインスタンス(test1)の合計メソッドを呼び出して、自分の子供に登録されているインスタンス(test2,test3)全ての値を合算するということです。
質問の方法が曖昧で分かりにくいと思いますが、
指示いただければ追記いたしますので、
お時間のある方お力を貸していただければと思います。
宜しくお願いします。
No.3ベストアンサー
- 回答日時:
>public void addTest(Test child){
>this.child = child;
>}
>これは、test1(元インスタンス)=test2(引数のほう)にするということ>でしょうか。
test1のメンバ変数にtest2を設定しています。
>少し違っていて、
>test1.addTestでよびだしたとして、
>test1の子(サブインスタンス?)にchild(=test2など)としたいと思っ>ています。
すいません。ここ全然意味が理解できないです・・・
>そして、本来の目的は
>最後にtest1.totalという風に呼び出したときに、
>testクラスにある、
>public int total(){
>test1の子インスタンス(addTestで引数に指定した全てのインスタン>ス)のscoreを全て足す
>}
>ということをしたいと思っています。
では
public class TestMain {
public static void main(String[] args){
Test test1 = new Test(1);
Test test2 = new Test(2);
Test test3 = new Test(3);
test1.addTest(test2);
test1.addTest(test3);
System.out.println(test1.total());
}
}
class Test{
Test(int score){
this.score = score;
}
public int score;
public List<Test> childList = new ArrayList<Test>();
public void addTest(Test child){
this.childList.add(child);
}
public int total(){
int result = this.score;
for(Test child : this.childList){
result += child.score;
}
return result;
}
}
それではこういうこと?
No.4
- 回答日時:
#2です。
ちょっと、コードが間違ってました。
public void addTest(Test child) {
if (this.child == null) {
this.child = child;
} else {
this.child.addTest(child);
↑ここ変更。
}
}
メソッドの引数とインスタンス変数の名前を同じにするとややこしくなっちゃいますね。
No.2
- 回答日時:
こんにちは。
>少し違っていて、
>test1.addTestでよびだしたとして、
>test1の子(サブインスタンス?)にchild(=test2など)としたいと思っています。
ここは、#1さんの方法で間違っていませんよ。
これで、ちゃんと test1 の変数 child に test2 のインスタンスが登録されます。
ただ、もし、数珠つなぎにするという仕様であっているのなら、addTestメソッドは、
public void addTest(Test child) {
if (this.child == null) {
this.child = child;
} else {
child.addTest(child);
}
}
この方が、簡単に数珠つなぎになるんじゃないですか。
あと、totalメソッドですが、ごく単純に、
public int total(){
int result = num;
if (child != null) {
result += child.total();
}
return result;
}
これで、再帰的にそれぞれのインスタンスが自分の子のトータルを呼び出して、万事うまくいくと思いますよ。
回答ありがとうございます。
すみません、#1さんのが正しかったんですね。
初心者すぎてちゃんと理解できていませんでした。
御指摘ありがとうございました。
#1さん、すみませんでした。
そうです、やりたかったことは数珠繋ぎです。
(そのような言葉はまったく浮かんでいませんでした。。。)
再帰処理を用いればいいんですね!
頭がだいぶすっきりしました。
整理してやってみます!
本当にありがとうございました<(_ _)>
No.1
- 回答日時:
public class TestMain {
public static void main(String[] args){
Test test1 = new Test(1);
Test test2 = new Test(2);
Test test3 = new Test(3);
test2.addTest(test3);
test1.addTest(test2);
System.out.println(test1.num + test1.child.num + test1.child.child.num);
}
}
class Test{
Test(int num){
this.num = num;
}
public int num;
public Test child;
public void addTest(Test child){
this.child = child;
}
}
こういうかんじのことがしたいんですか?
この回答への補足
回答ありがとうございます。
public void addTest(Test child){
this.child = child;
}
これは、test1(元インスタンス)=test2(引数のほう)にするということでしょうか。
少し違っていて、
test1.addTestでよびだしたとして、
test1の子(サブインスタンス?)にchild(=test2など)としたいと思っています。
そして、本来の目的は
最後にtest1.totalという風に呼び出したときに、
testクラスにある、
public int total(){
test1の子インスタンス(addTestで引数に指定した全てのインスタンス)のscoreを全て足す
}
ということをしたいと思っています。
(自動的に子インスタンス全てを呼んでくる、という方法があるのか、という疑問もあるのですが)
これで説明になっていますでしょうか・・・
何分初心者で言葉の意味が曖昧なところがあるので伝わりにくくてすみません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- 教えて!goo 教えてGooヲチスレは今もどこかにあるのでしょうか? デジタルライフオールスターズは今? 1 2023/08/21 08:43
- サーバー Windowsサーバでグループを検索したい 1 2023/04/17 15:30
- Excel(エクセル) VBA ワークシート指定の1行目を選択をしたい 2 2022/08/20 18:10
- PHP $_SESSIONについて教えて下さい。 2 2023/03/02 09:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数名の付け方
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
-
インスタンス参照でアクセスで...
-
生成したインスタンスを削除す...
-
VB.NET getとsetの概念がわかり...
-
String a = "a"; と String b =...
-
C#において、同じインスタンス...
-
文字列を日付に変換でParseExce...
-
他のファイルの変数参照
-
フォームの存在をチェックする方法
-
変数の参照でエラーが出てしま...
-
C# インスタンスの破棄
-
C#「オブジェクト参照が必要で...
-
javaのクラスの作り方、エラー...
-
オブジェクト参照がオブジェク...
-
SerialPort処理でInvokeメソッ...
-
「インスタンス」の意味をわか...
-
【java】コンストラクタの処理...
-
インスタンスを同じ名前で作成...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数名の付け方
-
インスタンス参照でアクセスで...
-
private static という変数の修飾
-
VB.NET getとsetの概念がわかり...
-
C# インスタンスの破棄
-
複数の変数を宣言する時、同時...
-
C#において、同じインスタンス...
-
生成したインスタンスを削除す...
-
SQLを連続発行する時の正しい(?...
-
文字列を日付に変換でParseExce...
-
変数の参照でエラーが出てしま...
-
エクセル(複数インスタンス)...
-
フォームの存在をチェックする方法
-
VB6.0で、DLLを動的に参照したい
-
String a = "a"; と String b =...
-
C#「オブジェクト参照が必要で...
-
newしないインスタンス?実体化...
-
「インスタンス」の意味をわか...
-
SetWindowsHookExで質問
-
フィールドでのnewとコンストラ...
おすすめ情報