前提・実現したいこと
通信を繰り返しある一定条件達成するまで実行したい
発生している問題・エラーメッセージ
while分を使ったところうまくいかず原因がわからないため手詰まり エラーは出ないがうまくいかなかったのでもとにしたソースコードを記載
該当のソースコード
java
1 2 3クライアント側 4public static void main(String[] args) { 5 try { 6 //所持金の定義 7 int syojikin = 1000; 8 /** 9 * 名前と掛け金を入力してサーバに送信 10 */ 11 System.out.println("ハイカードを開始します。"); 12 System.out.println("名前とかけ金を入力して下さい。現在の所持金:" + syojikin); 13 //名前の入力 14 System.out.print("名前:"); 15 Scanner sc = new Scanner(System.in); 16 String playerName = sc.next(); 17 //掛け金の入力 18 System.out.print("かけ金:"); 19 int kakekin = sc.nextInt(); 20 syojikin = syojikin - kakekin; 21 System.out.println(kakekin + "をベットし、所持金は" + syojikin + "になりました。"); 22 /** 23 * 送信処理 24 */ 25 Socket sock = new Socket("localhost", 10000); 26 System.out.println("サーバに接続しました。"); 27 DataOutputStream out = new DataOutputStream(sock.getOutputStream()); 28 //名前の送信 29 out.writeUTF(playerName); 30 System.out.println("名前を送信しました。"); 31 //かけきんの送信 32 out.writeInt(kakekin); 33 System.out.println("かけきんを送信しました。"); 34 out.writeInt(syojikin); 35 /*: 36 * サーバで生成した一回目の乱数を受信 37 */ 38 System.out.println("一回目の乱数を受信待ちです。"); 39 DataInputStream in = new DataInputStream(sock.getInputStream()); 40 int rndNumber = in.readInt(); 41 System.out.println("1回目の乱数は" + rndNumber + "でした。"); 42 //サーバ側で生成される2回目の乱数が、一回目より大きいか小さいかを予測してサーバ側に送信する。 43 System.out.println("2回目の乱数は1回目よりも大きい?小さい?"); 44 System.out.println("小さいと思うなら1を、大きいと思うなら99を入力してね。"); 45 ////////////////////ここから先は自分で考える//////////////////////////////// 46 //予想をキーボードから入力「1」or「99」 47 int yosou = sc.nextInt(); 48 49 //予想を送信 50 out.writeInt(yosou); 51 System.out.println("予想を送信しました。"); 52 //二回目 53 int a = in.readInt(); 54 System.out.println(a); 55 System.out.println("2回目の乱数は" +a + "でした。"); 56 //サーバ側で行われた判定結果(かけきん)の受信 57 kakekin=in.readInt(); 58 //受け取った掛け金を所持金に加算 59 syojikin=syojikin+kakekin; 60 //所持金の表示 61 System.out.println("所持金は"+syojikin); 62 ///////////////////////////////////////////////////////////////////////////// 63 //outputStreamを閉じる。 64 out.close(); 65 in.close(); 66 //終了 67 sock.close(); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 } 71 } 72 73サーバー側 74public static void main(String[] args) { 75 System.out.println("ハイカードを開始します。"); 76 System.out.println("プレイヤーの接続を待っています。"); 77 try { 78 //10000番ポートを開放し、データ受け取るの準備 79 ServerSocket svSock = new ServerSocket(10000); 80 //Socketを用意 81 Socket sock = svSock.accept(); 82 //InputStreamを用意 83 DataInputStream in = new DataInputStream(sock.getInputStream()); 84 //プレイヤーから名前とかけきんを受信 85 String playerName = in.readUTF(); 86 int kakekin = in.readInt(); 87 int syojikin = in.readInt(); 88 System.out.println(playerName + "を受信しました。"); 89 System.out.println(kakekin + "を受信しました。"); 90 //1-13の乱数を生成し、プレイヤーに送信 91 Random rnd = new Random(); 92 int rndNumber = rnd.nextInt(13) + 1; 93 System.out.println("1回目の乱数は" + rndNumber + "です。"); 94 //送信用の準備 95 DataOutputStream out = new DataOutputStream(sock.getOutputStream()); 96 out.writeInt(rndNumber); 97 ////////////////////ここから先は自分で考える//////////////////////////////// 98 //プレイヤーの予想を受信 99 int playerYosou = in.readInt(); 100 System.out.println("プレイヤーは" + playerYosou + "と予想しました。"); 101 //2回目の乱数生成 102 int rnd2 = rnd.nextInt(13) + 1; 103 System.out.println("二回目は" + rnd2); 104 out.writeInt(rnd2); 105 //1回目と2回目の比較 106 //大きい 107 //playerの予想があってるか判定 108 if (playerYosou == 99) { 109 if (rndNumber <= rnd2) { 110 syojikin = syojikin + kakekin * 2; 111 } else { 112 syojikin = syojikin - kakekin; 113 System.out.println("所持金は" + syojikin); 114 } 115 } else if (playerYosou == 1) { 116 if (rndNumber > rnd2) { 117 syojikin = syojikin + kakekin * 2; 118 } else { 119 syojikin = syojikin - kakekin; 120 System.out.println("所持金は" + syojikin); 121 } 122 } 123 //掛け金の変動 124 if ((playerYosou == 99 && rndNumber <= rnd2) || (playerYosou == 1 && rndNumber > rnd2)) { 125 kakekin=kakekin+100; 126 }else {kakekin=0;} 127 //変動後の掛け金をプレイヤーに送信 128 out.writeInt(kakekin); 129 ///////////////////////////////////////////////////////////////////////////// 130 //受信ストリームの終了 131 in.close(); 132 out.close(); 133 svSock.close(); 134 } catch (IOException e) { 135 e.printStackTrace(); 136 } 137 }``` 138 139### 試したこと 140 141while分を使って両方とも繰り返し 142あくまで所持金を使いまわす 143掛け金は毎回受け取って変える仕様 144まずは通信のやり取りの繰り返し方を知りたいです 145### 補足情報(FW/ツールのバージョンなど) 146 147eclipse
嫌がらせのようなコード提示方法ですね。
終わりの ``` は「それだけの行」とする必要があります。
プレビューが出ているはずですので、枠に入った状態になるかを確認してください。
ご質問は編集できます。
また、コードや画面表示以外は、 ``` で囲まないようにしてください。
元にしたコードだけを張られても意味が有りません。これでは丸投げになります。
うまくいかなかったコードもご提示頂いて、行単位のレベルでどの部分がどのなると考えてそのようなコードになったのか、結果どのような動作になり、その原因をどこまで調べたのか等を教えてください。
> while分を使ったところうまくいかず原因がわからないため手詰まり
> エラーは出ないがうまくいかなかったのでもとにしたソースコードを記載
まったく読む気にならない質問内容となっていますが、通信の繰り返し方法というより、その前に基本的なプログラムの組み方・考え方の問題なのでは。
[質問するときのヒント] https://teratail.com/help/question-tips
あなたの回答
tips
プレビュー