Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

オブジェクトの変数について

以下に示しますように、オブジェクトの変数s1をs2に代入後、その時点でオブジェクトの変数s1が参照するヒープメモリを初期値「s1.setA(t) ;//*1を処理した段階のメモリ」としてt1=11以降の場合もs2.setA(t1)//*2を処理する方法はありますでしょうか。(実際はs1,s2は同じヒープを参照するためうまくいきません)


public static void main(String[] args)  {
S s1 = new S();
S s2 = new S();
for (int t = 1; t < 10; t++) {
s1.setA(t) ;//*1
}
for (int t1 = 10; t1 < 20; t1++) {    
s2=s1;
s2.setA(t1);//*2
}
}

6

回答

78451

閲覧

6件の回答

評価

0

なにをしたいのか理解できません。
代入以降も元のオブジェクトを処理したいとは、どういうことですか?

評価

0

>S s2 = new S();
は意味ないと思いますけどね。

>s2=s1;
をちゃんと考えていないからでは?
cloneとか

参照とか言葉は使っているけど、
よく理解してみる必要があるのかも

評価

0

あー、なるほど…。

>s2=s1;

t=1〜9について処理したs1をs2にコピーして、s1はそのまま取っておきたい。
s1はt=1〜9、s2はt=1〜19を処理したいということですか。

そうであれば、面倒くさがらずループを2つ作るか、まあさんの書かれているcloneが妥当でしょうね。

評価

0

私のプログラムではループは7重以上になる予定です。s2ではt=1〜9を省略しs3では1〜10をs4では1〜11を・・・s7を処理後は再び元に戻ってs2ではt=1〜10を・・・ ・・・ この7重のループを400回程度繰り返す処理(最後にs2は1〜399の処理を省略したい)となっています。
 従って、cloneを理解できるよう勉強してみます。ヒントをいただきあがとうございました。VBではこのプログラムは行き詰まり、javaを始めたはかりですので基礎ができていません。
解決できたときは深く感謝いたします。

評価

0

何をしたいのかが分からないので、たしかなことは言えませんが…。
7重以上となるようなループが作られるような処理は、あまり考えられません。
ロジック自体を、考え直せないものでしょうか?

VBで行き詰まった処理が、Javaで可能だという保証もまた、ありません。
逆に、ロジックを変えれば、VBでも可能だったかも知れません。

評価

0

>VBで行き詰まった処理が、Javaで可能だという保証もまた、ありません。
>逆に、ロジックを変えれば、VBでも可能だったかも知れません。

と言われているように、そもそも言語として処理できないもの、言語機能として持っていないものとかでなければ、言語を問わずできないということはないでしょう。
途中までできてて、行き詰まったということは、まず言語的障害でもなければ、途中でロジックがわけ解らんことになったとかいうことになってたりするんでしょう。

私もその先何がやりたいのか判りませんが、まずジックリとロジックを組み上げること。
まずs1だけについてコードを書き上げることはできませんか?
それが終わったらs2,s3,...と。
冗長になっても、まずシッカリと自分に解る形で書き上げること、そして期待通りの結果が得られていることを確認すること。
よく解らないまま複雑なコードになってしまっても、それが期待通りであるかのチェック(テスト)もよく判らんことになってしまったりするでしょう。

それができたら、コード全体を眺めて、冗長な部分を整理して行く(手を入れられる場所がないということもあり得る)としてやっていくと、冗長→無駄に思えて、悩み,格闘して費やした時間も大幅に短縮できていたりすると思います。

例程度ならと、極力挙げられた形に近いものとしてcloneとか挙げてみましたが、もっと複雑になるというなら、mioさんの挙げられているような
>面倒くさがらずループを2つ作るか
とか、(挙げられた形に近いものとしては、外れるとして割愛した)
tループではs1,s2に対するsetA,t1ループではs2に対するsetA
とかもあるでしょう。
確かにcloneとかより処理時間は掛かることにもなるかもしれません。
が、それよりロジックに悩むことに掛かる時間の方を優先でしょう。

>7重のループ
言葉の間違いとかだと思いますけど
挙げられた例だと"2重"ではなく、"2つ"ですよね?
もしかしたら"7重"と思うことが、複雑に考えさせてしまっている要因になっていたりしないのかと思ってみたりもしますが。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。