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

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

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

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

Q&A

解決済

1回答

3971閲覧

ジャンケンプログラム while利用の繰り返し処理(java)

yunaga

総合スコア2

Java

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

while

Whileは多くの言語で使われるコントロール構造であり、特定の条件が満たされる限り一連の命令を繰り返し実行します。

0グッド

0クリップ

投稿2020/05/06 14:47

編集2020/05/07 00:08

現在、javaの練習としてジャンケンのプログラムを作っています。

「あいこ」になった際、再度ジャンケンをする、ところが無限ループしてしまいます。
どなたかJavaに詳しい方がいらっしゃいましたらアドバイスいただけませんでしょうか。
よろしくどうぞお願いいたします。

▽条件
ジャンケンをする2人を生成する
その二人がジャンケンをする
勝った方の名前を出力する
あいこになった場合、二人が再度ジャンケンをする

import java.util.Random; class jyanken{ public static void main(String[] args){ Person person1 =new Person("tanaka"); Person person2 =new Person("suzuki"); System.out.println("それではジャンケンをはじめます"); person1.printData(); person2.printData(); while (true) { if(person1.getStr()=="グー" && person2.getStr()=="グー"||person1.getStr()=="チョキ" && person2.getStr()=="チョキ"||person1.getStr()=="パー" && person2.getStr()=="パー"){ System.out.println("あいこ"); person1.printData(); person2.printData(); }else if(person1.str=="グー"&&person2.str=="チョキ"||person1.str=="チョキ"&&person2.str=="パー"||person1.str=="パー" && person2.str=="グー") { System.out.println(person1.name+"の勝ちです"); break; }else{ System.out.println(person2.name+"の勝ちです"); break; } } } } class Person{ public String name; String[] strs = {"グー","チョキ","パー"}; Random r = new Random(); String str = strs[r.nextInt(3)]; Person(String name){ this.name = name; } public String getStr(){ return str; } public void printData(){ System.out.println(this.name); Random r = new Random(); String str = strs[r.nextInt(3)]; System.out.println(this.str); } }

▽エラーメッセージ
エラーメッセージは出ないが、「あいこ」になった場合、ループしてしまう

▽利用環境
windows10
Visual Studio code
コマンドプロント

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

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

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

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

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

swordone

2020/05/06 15:14

質問編集画面にて、コード部分を反転選択し、<code>というボタンをクリックし、「言語をここに入力」を「java」に書き換えて投稿してください。
swordone

2020/05/06 15:23

「自動ループする」というのは、無限ループするということですか?
yunaga

2020/05/07 00:09

ご指摘ありがとうございます。課題を修正いたしました!「自動ループ」も「無限ループ」へ変更いたしました。
guest

回答1

0

ベストアンサー

Personクラスに問題があります。
じゃんけんの動作をprintData()メソッドで行っているので、printData()メソッドの中身を考えます。
0以上3未満の乱数を発生させて、それを配列のインデックスとして、対応する手を文字列として出力する。
という動きですが、

java

1 public void printData(){ 2 System.out.println(this.name); 3 Random r = new Random(); 4 String str = strs[r.nextInt(3)]; 5 System.out.println(this.str); 6 7 } 8

これだと、じゃんけんの結果の手はローカル変数のstrに入って、メンバ変数のthis.strには入っていません。this.strを初期化の際に

java

1class Person{ 2 public String name; 3 String[] strs = {"グー","チョキ","パー"}; 4 Random r = new Random(); 5 String str = strs[r.nextInt(3)]; 6 : 7 :

と初期化しているために、何か手が入っている状態のため、問題に気が付きにくい状態になっています。
ですので直すとしたら、下記のようになります。

java

1class Person{ 2 public String name; 3 String[] strs = {"グー","チョキ","パー"}; 4 String str = ""; 5 6 Person(String name){ 7 this.name = name; 8 } 9 10 public String getStr(){ 11 return this.str; 12 } 13 14 public void printData(){ 15 System.out.println(this.name); 16 Random r = new Random(); 17 this.str = this.strs[r.nextInt(3)]; 18 System.out.println(this.str); 19 20 } 21}

メンバ変数のRandom rは使っていないので削除しました。

あと、メンバ変数を記述する際にthisをつけたりつけなかったりする書き方をされていますが、初学者だとのことですので、明確に区別できるようにメンバ変数を使っているところは全てthisをつけておきました。

もっと細かいことを言うと、呼び出し側でgetStr()を使ったり、直接メンバ変数のstrを使ったりしていますが、本来でしたら、メンバ変数はprivate宣言しておいて、getStr()を使うように統一したほうが良いです(同様にnamegetName()を作ってこちらを使用する)。

投稿2020/05/06 15:28

KoichiSugiyama

総合スコア3041

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

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

yunaga

2020/05/07 00:05

ご丁寧に指示をくださいましてありがとうございます!!勉強になることが本当に多いです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問