プロが教える店舗&オフィスのセキュリティ対策術

すいません再び質問です。

じゃんけんの問題です(0がグー、2がチョキ、5がパー、指の本数です)

public class Sample9_2 {
public static void main(String[] args) {

int[] a = { 0, 5, 5, 0 };
int[] b = { 2, 5, 2, 2, 5, 0, };
int[] c = { 5, 0, 2, 0, 2, 5, 2 };

int index = 0;
boolean 同じ手を出していない = true;
while (同じ手を出していない) {

if (a[index % a.length] == b[index % b.length]
&& b[index % b.length] == c[index % c.length]) {
同じ手を出していない = false;

} else {
index++;

}
}
System.out.println((index + 1) + "回目で全員が同じ手を出しました");
}
}

【実行結果】
50回目で全員が同じ手を出しました



boolean 同じ手をだしていない = true と
同じ手を出していない = false の意味がわかりません;

すいませんが回答お願いします。

A 回答 (2件)

「同じ手を出していない」を見やすいようにresultでおいたとします。


そうすると、

public class Sample9_2 {
public static void main(String[] args) {

int[] a = { 0, 5, 5, 0 };
int[] b = { 2, 5, 2, 2, 5, 0, };
int[] c = { 5, 0, 2, 0, 2, 5, 2 };

int index = 0;
boolean result = true;
while (result) {

if (a[index % a.length] == b[index % b.length]
&& b[index % b.length] == c[index % c.length]) {
result = false;

} else {
index++;

}
}
System.out.println((index + 1) + "回目で全員が同じ手を出しました");
}
}

と書き換えることができます。
ここで、while関数は()の中身が真の時に繰り返しを行います。
つまり、while(result)で繰り返されている間は同じ手が出されていないということです。
つぎに、result=falseというのはa,b,cが同じ手を出したことになります。
ということはつぎのwhile(result)は()の中身が偽なのでループ処理がそこで終了します。
indexには最初は0が入っているわけですから、0回目は存在しないので全員が同じ手を出したのは最低でも1回目以降となります。
なので(index + 1)回目で同じ手を出したということです。

あと、変数はできるだけアルファベットで意味をもたせたほうが見やすいプログラムになりますよ
    • good
    • 0

まず、見辛いので、『同じ手を出していない』を変数hogeとしましょう。



boolean hoge = true;
これは、今現在、同じ手を出していないということです。まだ1回も始めていないのですから当たり前ですね。

while (hoge) {
これは、同じ手を出していない間、ずっと繰り返すということです。

hoge = false;
これは、a、b、cの全てが、同じ手を出したから、『同じ手を出していない』ということを否定したわけです。
結果、次のwhile()は否定され、ループから抜けます。


変数の宣言方法などが気になりますが、意味合いとしては上記のようになります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!