私は3つのクラスを持っています。サーバが起動すると、guessCountと乱数を持つrandomGameオブジェクトが作成されます。クライアントが起動すると、サーバに接続し、その番号をサーバに渡してguessメソッド(コンソール入力番号付き)を再生し、生成されたrandomGameの乱数を推測します。Javaマルチスレッドとオブジェクト
しかし、次のような問題があります。クライアントは毎回番号を入力し、guessCount &の乱数は再初期化されます(つまり、乱数は異なり、guessCountは増分できません)。私は乱数を実行している各クライアントプログラムで同じにし、guessCountは推測メソッドが実行されるたびに1ずつインクリメントされます。
public class Game {
private int num;
private int guessCount;
Game (int num) {
this.num = num;
System.out.println("guessCount = " + guessCount);
System.out.println("num = " + num);
}
public int guess (int ran) {
int result;
guessCount++;
if (this.guessCount >= 10) {
return -2;
} else if (ran < num) {
return -1;
} else if (ran > num) {
return 1;
} else {
return 0;
}
}
}
はここRandomGame
class RandomGame extends Game {
RandomGame() {
super(0 + (int)(Math.random() * ((90 - (0)) + 1)));
}
public static void main (String args[]) {
}
}
だここで、サーバーの:
import java.io.*;
import java.net.*;
public class Q4Server {
public static void main(String arg[]) {
try {
ServerSocket ss = new ServerSocket(12345);
while(true) {
Socket s = ss.accept();
ClientHandler ch = new ClientHandler(s);
ch.start();
}
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
ここでは、クライアントハンドラです:
class ClientHandler extends Thread {
Socket socket;
RandomGame g;
public ClientHandler(Socket socket) {
this.socket = socket;
g = new RandomGame();
}
public void run() {
try {
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
int x = dis.readInt();
int reply = this.g.guess(x);
System.out.println("reply = " + reply);
dos.writeInt(reply);
//System.out.println(reply);
//System.out.println(reply);
socket.close();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
}
効果なし(....... – hkguile