• 締切済み

javaのwhile文について

すいません再び質問です。 じゃんけんの問題です(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 の意味がわかりません; すいませんが回答お願いします。

  • Java
  • 回答数2
  • ありがとう数0

みんなの回答

回答No.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)回目で同じ手を出したということです。 あと、変数はできるだけアルファベットで意味をもたせたほうが見やすいプログラムになりますよ

回答No.1

まず、見辛いので、『同じ手を出していない』を変数hogeとしましょう。 boolean hoge = true; これは、今現在、同じ手を出していないということです。まだ1回も始めていないのですから当たり前ですね。 while (hoge) { これは、同じ手を出していない間、ずっと繰り返すということです。 hoge = false; これは、a、b、cの全てが、同じ手を出したから、『同じ手を出していない』ということを否定したわけです。 結果、次のwhile()は否定され、ループから抜けます。 変数の宣言方法などが気になりますが、意味合いとしては上記のようになります。

関連するQ&A

  • ゲーム理論(混合戦略)について

    ゲーム理論(混合戦略)についての質問です。 A_B--(グー)-(チョキ)-(パー)--- (グー) (0,0)(1,-1)(-5,5) (チョキ) (-1,1)(0,0)(2,-2) (パー) (5,-5)(-2,2)(0,0) 次の確率でじゃんけんとする。 プレーヤーA グー:a チョキ:b プレーヤーB グー:X チョキ:Y 上記の場合、 プレーヤーAのベストミックスは(a;1/4 b;5/8 c;1/8) プレーヤーBのベストミックスは(a;1/4 b;5/8 c;1/8) で正しいでしょうか?

  • 10回じゃんけんの確率計算

    モバゲーにて、10回じゃんけんを同時にして合計6勝以上したら、景品がもらえるという遊びがはやっています。 そこで6勝以上する確率の計算法もしくは、6勝以上する確立を教えていただけないでしょうか? 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 このように10回じゃんけんを一度に出し、合計の勝利数で決まります。二人同時に手をだします。 この例だと、自分が6勝です。 あいこは、勝ちには入りませんので、負けと同じ扱いです。 説明不十分かと思いますので、対戦例を2点かきます。 相手「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「チョキ」 自分「グー」「チョキ」「チョキ」「グー」「チョキ」「グー」「チョキ」「グー」「パー」「グー」 ↑これは、自分が、5勝です。 相手「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」「グー」 自分「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」「パー」 ↑これは自分が10勝です。 じゃんけんの手は、二人とも、同時に10手だします。6連勝じゃなく、負けても、何度目で勝ってもいいので、6回以上かてた時の確率を知りたいです。

  • 確率の問題がわかりません。

    A,B,Cの三人で次のようなじゃんけん競技を行う。 ・皆グー,チョキ,パーを任意に出すが,グーはチョキに勝ち,パーはグーに勝つ。 ・全員が同じものを出せばアイコ(勝負がつかない)。また,グー,チョキ,パーが出揃ってもアイコ。 ・まけた人はその場ではずれ,残った人でじゃんけんを行う。 ・じゃんけんは何回でもできるものとし,勝ち残った者が一人になれば,その人が優勝となる。 (1)最初のじゃんけんでアイコになる確率は? (2)Aが二回目で優勝する確率は? (3)Aが三回目で優勝する確率は? (4)Aがn回目で優勝する確率をPnとすると、Pnは? (5) (4)より、Aが優勝する確率Σ(∞)(n=1)Pnは? ただし,0<a<1のとき,lim(n→∞)na^n=0である。 わかる方、全問でなくてもいいので、解き方を詳しく教えていただけたら幸いです。お願い致します。

  • pの出す手の確率→グー:チョキ:パー=1/2:1/

    pの出す手の確率→グー:チョキ:パー=1/2:1/4:1/3qの出す手の確率→グー:チョキ:パー=1/4:1/3:1/4 (1)2回じゃんけんしてqがグーで勝つ確率 (2)4回じゃんけんしてpがパーかチョキで勝つ確率 教えてくださいm(_ _)m

  • C言語について

    C言語のじゃんけんゲームを作成したいのですが、 仕様は 1.利用者とコンピュータによる対戦形式とします。 2.利用者がキーボードから入力した手(グー・チョキ・パー)と、擬似乱数を用いて生成したコンピュータの手を比較し、利用者の勝ち・あいこ・負けの結果を表示しなさい。 3.利用者の入力が不正の場合には再度入力を促すなど、適切な処理をしなさい。 4.これまでの累積勝利数・引き分け数・敗北数をそれぞれ、user_win・user_draw・user_loseの3つの変数(int型)に格納しなさい。 5.連勝中の場合は「5連勝中!」などと表示させるようにしなさい。 6.あいこである限りは自動的にじゃんけんを反復しなさい。 7.勝敗がついた場合、利用者にまだ継続するか質問した上で、じゃんけんを反復させなさい。 8.じゃんけんを終了した場合、これまでの通算成績として、累積勝利数・引き分け数・敗北数のほか、勝利=累積勝利数÷(累積勝利数+累積敗北数)×100、および、最大勝利数を計算して表示しなさい。 という仕様のじゃんけんゲームを作成したいのですが、下記に書いているまでしかできません。誰か教えていただけないでしょうか。分からなくて困っています。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int a,c; srand(time(NULL)); c = rand()%3+1; printf("手を入力してください [1:グー 2:チョキ 3:パー] "); scanf("%d",&a); if(a==1 && c==1) printf("あなたはグーで、私もグーでした。アイコです。\n"); else if(a==1 && c==2) printf("あなたはグーで、私はチョキでした。あなたの勝ちです。\n"); else if(a==1 && c==3) printf("あなたはグーで、私はパーでした。あなたの負けです。\n"); else if(a==2 && c==1) printf("あなたはチョキで、私はグーでした。あなたの負けです。\n"); else if(a==2 && c==2) printf("あなたはチョキで、私もチョキでした。アイコです。\n"); else if(a==2 && c==3) printf("あなたはチョキで、私はパーでした。あなたの勝ちです。\n"); else if(a==3 && c==1) printf("あなたはパーで、私はグーでした。あなたの勝ちです。\n"); else if(a==3 && c==2) printf("あなたはパーで、私はチョキでした。あなたの負けです。\n"); else if(a==3 && c==3) printf("あなたはパーで、私もパーでした。アイコです。\n"); else printf("正しい手を入れてください。\n"); return 0; }

  • for文

    質問お願い致します。 これのソースのfor文を一つの文にするにはどのように書いたらよいでしょうか? お願い致します。 //指定された文字列が"a"と"b"の両方を含む場合はtrue、なければfalseを返す public class Mondai { public static void main(String[] args) { System.out.println("解答 :" + charBothContain("Habllow")); } public static boolean charBothContain(String str) { boolean answer1 = false; boolean answer2 = false; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { answer1 = true; break; } } for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'b') { answer2 = true; break; } } return answer1 && answer2; } }

    • ベストアンサー
    • Java
  • 場合の数を教えてください。

    場合の数を教えてください。 問)4人が1回じゃんけんするとき、その手の出し方は何通りあるか。 A回答) 4人がグー、チョキ、パーの3種類をだせるから 4C3=4通り たぶん、こんなに少ないはずないから、間違いでしょう。 B回答) 4人がグー、チョキ、パーの3種類を出す(並べる)から順列 4P3=24通り C回答) 4人とも、それぞれグー、チョキ、パーの3通りを出すことができるから 1氏  2氏  3氏  4氏 3通り 3通り 3通り 3通り これを和の法則に当てはめるのか、積の法則なのか んーと 同時に起こらない場合は和。 この場合は同時にじゃんけんするから和ではない。 だから積の法則で 3×3×3×3=81 これあっていそうです。 疑問) 組み合わせをA回答のように、この問題に当てはめていいのでしょうか。 4人の中から何人かを選ぶなら4C?になるかも知れませんが その手をだすのを組み合わせとしていいのかどうか、どうなんでしょう。 B回答でも同じ疑問ですが 4人の中から何人かを選んで並ばせたら順列ですよね。 人を並ばせるわけではないから順列ではないのかな。 どれを当てはめればいいのかという、これだというのがあるんでしょうか。

  • センター数学 模試 確率

     センター試験 数IAの模擬試験の復習をしていて、確率の問題でわからない箇所があったので教えてください。  A、B, C, Dの4人が1回だけじゃんけんをする。4人がグー、チョキ、パーを出す確率はそれぞれ等しく1/3とする。 4人の出した手がグー、チョキ、パーの3種類すべてある確率を求めよ。 私は、4人の中から、グー、チョキ、パーを出す3人をまず選んで、その中で誰がどの手を出すかを考え、残った1人は3通りのての出し方があるので  4C3 × 3!× 3=72 通り として確率を出しました。しかし、解答は、4人を2人、1人、1人に分ける組み合わせの数は、4C2=6通り で、その各々に対して、手の出し方は3!=6通りだから、 6×6=36通り として確率を求めています。 解答を読めば、「そうだな」と思うのですが、私の考え方のどこが違っていたのかがわかりません。分かる方がいたら、ご指摘お願いします。  

  • switch文

    switch文を使って、コンピュータとジャンケンをするプログラムを作らなくてはいけません。 c++です。 まず、ダイアログベースで作っています。グー,チョキ、パーのボタンを配置しました。 このあとボタンを押したときにコンピュータとじゃんけんをしたいのですが、プログラム文をどのようにかいたらいいのかわからないので教えてください。

  • じゃんけんゲームの期待値です。

    A,Bの2人でじゃんけんをして勝ったものが得点を得るゲームをする。 負けたものは、得点を得られないが減らされることはない。 また、あいこの場合は双方とも得点は得られない。 得点はグー・チョキ・パーの手をだして勝った時、 それぞれ3点・5点・6点であるとする。 (1) 2人が同じ確率で無作為に手を運ぶとき、得点の期待値を求めなさい。 (2) 2人がグー・チョキ・パーをそれぞれ1/5、2/5、2/5の確率で無作為にだすとき、 得点の期待値を求めなさい。 どうか、よろしくお願いします。

専門家に質問してみよう