乱数を生成するrunメソッドを実装し、getchoiceメソッドと生成された数値を返して実行を通知するgetchoiceメソッドを待機するPlayerクラス(runnableを実装する)を作成するように求められます。それぞれのプレーヤーオブジェクトを含む2つのスレッドを含むメソッド実行を含むRockPaperScissorsクラス(Runnableを実装する)は、これらの2つのスレッドを互いに1000回再生する必要があります。次に、それらを中断し、各プレーヤー勝った 。 。私の問題は、私のコードが実行を開始するときに、それは完璧ですが、ランダムなラウンドでは、ゲームの目的を敗北させるプレーヤー2に行く前に何度もプレーヤー1を再生し始めます:2つのスレッドを定期的に実行するには?
public class RockPaperScissors implements Runnable {
int result1 ;
int result2 ;
int result3 ;
private final Object lock = new Object();
public void run(){
synchronized(lock){
Player a = new Player() ;
Player b = new Player() ;
Thread a1 = new Thread(a) ;
Thread b1= new Thread (b) ;
a1.start();
b1.start();
int choice1 = -100 ;
int choice2 = -1066 ;
for (int i = 0 ; i < 1000 ; i++){
try {
choice1 = a.getChoice();
} catch (InterruptedException e1) {
}
try {
choice2 = b.getChoice();
} catch (InterruptedException e) {
}
if (choice1 == 1 && choice2==0)
result2++;
else if (choice2 == 1 && choice1==0)
result1++;
else if (choice1 == 1 && choice2==1)
result3++ ;
else if (choice1 == 1 && choice2==2)
result1++ ;
else if (choice1 == 2 && choice2==1)
result2++ ;
else if (choice1 == 0 && choice2==2)
result1++ ;
else if (choice1 == 2 && choice2==0)
result2++ ;
else if (choice1 == 2 && choice2==2)
result3++ ;
else if (choice1 == 0 && choice2==0)
result3++ ;
}
と、このクラスのプレーヤーである:
public class Player implements Runnable {
private final Object lockvalue = new Object();
private int a;
public void run() {
synchronized (lockvalue) {
for (int counter = 0; counter < 1000; counter++) {
java.util.Random b = new java.util.Random();
a = b.nextInt(3);
System.out.println(counter);
try {
lockvalue.wait();
} catch (InterruptedException e) {
System.out.println("Thread player was interrupted");
}
}
}
}
public int getChoice() throws InterruptedException {
synchronized (lockvalue) {
lockvalue.notify();
return a;
}
}
}
私のプログラムの開発は完全にカウンター表示は常に1000に0から始まる番号を持つ必要があります実行されている場合
が次々に重複しますが、ここでそれはそのように始まりますが、その後、それは1000に達することは決してありません。時には700時には800時に停止することもあります。私が使用することが許されているのは、notify()、notifyAll()、wait()、start()、interrupt()そしてjoin()です。あなたのご協力が大変ありがとうございます。おかげ
のRunnableは唯一のゲームに勝利し、ないそれが演奏される何回かについての情報を持っている必要があります。 – duffymo
RockPaperScissorsの実行可能ファイルを意味しますか? – Domarius
はい。もし私があなただったら、2人のプレーヤーが完璧に働いているというゲームのロジックが出てくるまで、スレッドを忘れるだろう。一度それを持って、それをマルチスレッドにしてください。 – duffymo