質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

4回答

1502閲覧

Javaのオブジェクトについて

TakamasaAwai

総合スコア73

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/07/07 14:15

lang

1public class Dice { 2 public static void main(String[] args) { 3 Sample s = new Sample(); // new Sample() でオブジェクトを作成して、それをsとする 4 s.n = 1; // nに1を代入 5 s.size = "L"; // sizeにLを代入 6 s.play(); 7 System.out.println(s.n); // nを表示させる 8 System.out.println(s.size); // sizeを表示させる 9 } 10}

Play()の中身は

lang

1void play() { 2 n = (int) (Math.random() * 6) + 1; // 1~6のどれかをnに代入 3 }

です。この時、s.n=1;よりs.play();が優先して表示されるのはなぜですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

「優先して」という表現が適切ではありませんね。

同じ変数nに対して値を再代入したため、値が書き換わっただけです。

下記と同じです。

int n = 1;
n = (int) (Math.random() * 6) + 1;
system.out.println(n);

投稿2015/07/07 14:36

wakuwaku

総合スコア386

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

s.n=1でSampleインスタンスsのメンバnの値が1になりますが,
その後s.play()によりsのメンバnの値が変更されます.
その後呼び出されるSystem.out.println(s.n)ではsのメンバnが出力されます.
当然,最後にnに代入したs.play()の結果が出力されます.

投稿2015/07/07 14:29

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakamasaAwai

2015/07/07 14:32

ご回答ありがとうございます。後に書かれている方が適用されるのですね。
guest

0

ベストアンサー

mainメソッドから見たs.nと、Sampleクラスのplayメソッドの中で値を設定しているnは同じ場所を指しています。
s.play()が後で実行されると、mainメソッドの最初で実行したs.n = 1を上書きします。

投稿2015/07/07 14:28

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakamasaAwai

2015/07/07 14:30

ご回答ありがとうございます。s.play()が後に書かれているから、ということでしょうか?
argius

2015/07/07 14:38

既にほかの回答者の方々がご指摘されていますが、上から順番に実行されていき、後に書かれているほうの処理で上書きされます。
guest

0

Sample の インスタンス変数 n を public としてしまっているので、
s.n = ... として直接代入
Sample クラスのメソッド play() の中で n = ... として代入
が混在してしまい, n の変化がとらえにくくなっています。

この事への一般劇な対応方法は、
n を public でなく、private にして、
値を設定する、値を参照するためのメソッド (stter, getter と呼ばれます)
をつくることです。

そうすると
s.set_n(1); // nに1を代入
s.play(); // n にランダムな値を設定
System.out.println(s.get_n()); // nを表示させる
のように書くことになります。

こうなっていれば Sample.java 中の set_n(), play() で見張っていれば、n の値の変化を捕まえることができます。
s.n = 1 のように直接 値が設定できる状態だと, ソースコード中の s.n = ... となっている部分の全ての箇所で見張っていないと n の値の変化を捕まえられません。

投稿2015/07/08 15:24

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問