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

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

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

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

Q&A

0回答

832閲覧

Javaの通信繰り返しのやり方

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2021/12/30 06:36

前提・実現したいこと

通信を繰り返しある一定条件達成するまで実行したい

発生している問題・エラーメッセージ

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

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

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

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

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

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

1T2R3M4

2021/12/30 06:39

嫌がらせのようなコード提示方法ですね。
jimbe

2021/12/30 06:51 編集

終わりの ``` は「それだけの行」とする必要があります。 プレビューが出ているはずですので、枠に入った状態になるかを確認してください。 ご質問は編集できます。 また、コードや画面表示以外は、 ``` で囲まないようにしてください。
jimbe

2021/12/30 06:56 編集

元にしたコードだけを張られても意味が有りません。これでは丸投げになります。 うまくいかなかったコードもご提示頂いて、行単位のレベルでどの部分がどのなると考えてそのようなコードになったのか、結果どのような動作になり、その原因をどこまで調べたのか等を教えてください。
dodox86

2021/12/30 08:53

> while分を使ったところうまくいかず原因がわからないため手詰まり > エラーは出ないがうまくいかなかったのでもとにしたソースコードを記載 まったく読む気にならない質問内容となっていますが、通信の繰り返し方法というより、その前に基本的なプログラムの組み方・考え方の問題なのでは。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問