永发信息网

java猜数字问题在线等,请让我通过审核吧,急呀

答案:2  悬赏:0  手机版
解决时间 2021-07-21 00:37

package test;

import java.lang.Runnable;
import java.lang.Thread;
public class Runnable4 {

public static void main(String args[]) {
Number number = new Number();
number.giveNumberThread.start();
number.guessNumberThread.start();
}

}

class Number implements Runnable {

int realNumber, guessNumber, min = 0, max = 100, message;
final int SMALLER = -1, LARGER = 1, SUCCESS = 8;
Thread giveNumberThread, guessNumberThread;

Number() {
giveNumberThread = new Thread(this);
guessNumberThread = new Thread(this);

}

@Override
public void run() {
// TODO Auto-generated method stub
for (int count = 1; true; count++) {
if (Thread.currentThread() == giveNumberThread) {
if (count == 1) {
realNumber = (int) (Math.random() * 100) + 1;
System.out.println("随机给你一个数为"+realNumber+",猜猜是多少");
} else {
if (realNumber > guessNumber) {
message = SMALLER;
System.out.println("你猜小了");
} else if (realNumber < guessNumber) {
message = LARGER;
System.out.println("你猜大了");
} else {
message = SUCCESS;
System.out.println("恭喜,你猜对了");
return;
}
}
try {
Thread.sleep(1500);
} catch (Exception e) {
}
}
if (Thread.currentThread() == guessNumberThread) {
if (count == 1) {
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数:" + guessNumber);
} else {
if (message == SMALLER) {
min = guessNumber;
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数是"
+ guessNumber);
} else if (message == LARGER) {
max = guessNumber;
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数是"
+ guessNumber);
} else if (message == SUCCESS) {
System.out.println("我成功了");
return;
}
}
try {
Thread.sleep(1500);
} catch (Exception e) {
}
}
}

}
}
运行结果这样子,然后进行死循环输出87,没办法在猜对了,而且要怎么改才能把“随机给你一个数为83,猜猜是多少”置于第一行呢?每次运行都是在于第二行
我第1次猜这个数:50
随机给你一个数为83,猜猜是多少
你猜小了
你猜小了
我第3次猜这个数是75
你猜小了
我第4次猜这个数是87
你猜大了
我第5次猜这个数是93
你猜大了
我第6次猜这个数是90
你猜大了
我第7次猜这个数是88
你猜大了
我第8次猜这个数是87
你猜大了
我第9次猜这个数是87
你猜大了
我第10次猜这个数是87
你猜大了
我第11次猜这个数是87
你猜大了
我第12次猜这个数是87
你猜大了
我第13次猜这个数是87

最佳答案

同问为什么要两个线程。。是做练习么 = =,那么修改如下:



import java.lang.Runnable;
import java.lang.Thread;
public class Main {


public static void main(String args[]) {
Number number = new Number();
number.giveNumberThread.start();
number.guessNumberThread.start();
}


}


class Number implements Runnable {


int realNumber, guessNumber, min = 0, max = 100, message;
final int SMALLER = -1, LARGER = 1, SUCCESS = 8;
Thread giveNumberThread, guessNumberThread;


static int s = 0;
static boolean flag = true;


Number() {
giveNumberThread = new Thread(this);
guessNumberThread = new Thread(this);


}


@Override
public void run() {
int count = 1;
while(flag) {
if (Thread.currentThread() == giveNumberThread && s == 0) {
if (count == 1) {
realNumber = (int) (Math.random() * 100) + 1;
System.out.println("随机给你一个数为"+realNumber+",猜猜是多少");
} else {
if (realNumber > guessNumber) {
message = SMALLER;
System.out.println("你猜小了");
} else if (realNumber < guessNumber) {
message = LARGER;
System.out.println("你猜大了");
} else {
message = SUCCESS;
System.out.println("恭喜,你猜对了");
flag = false;
}
}
try {
Thread.sleep(1000);
} catch (Exception e) {
}
++count;
s = 1;
}
if (Thread.currentThread() == guessNumberThread && s == 1) {
if (count == 1) {
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数:" + guessNumber);
} else {
if (message == SMALLER) {
min = guessNumber;
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数是"
+ guessNumber);
} else if (message == LARGER) {
max = guessNumber;
guessNumber = (min + max) / 2;
System.out.println("我第" + count + "次猜这个数是"
+ guessNumber);
} else if (message == SUCCESS) {
System.out.println("我成功了");
return;
}
}
try {
Thread.sleep(1000);
} catch (Exception e) {
}
++count;
s = 0;
}
}


}
}
加了一个信号量s用于让两个线程交叉执行内容,flag用于标记猜对了就退出。

全部回答

。。。。。。。。。为什么要用两个线程?

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
在诛仙中作商人,搞什么最好卖?最抢手?
同样寂静的夜,同样孤单的香烟,伴着同样起伏
樊城区襄樊安然纳米汗蒸养生馆怎么去啊,谁知
引产后对身体哪些伤害
六方最密堆积的相关知识
联想Y450STI本本视频问题
最新is频道编辑样本
一次次的失败..我该怎么办? 现在的我变得好
冒险岛,60牧师挂哪
QQ飞车怎弄
我用最漂亮的花体字把诗认认真真地重新誊写了
为何经常突然眼花花、想晕倒
晉國后事哪些國家?
浚县鹤壁小磨香油我想知道这个在什么地方
四川水煮鱼里面需要放什么配料?
推荐资讯
立煌是什么东西?
电解熔融的氧化铝制取金属铝,若有0.2mol电子
诛仙和赤壁哪个画面好看些?
为什么刚洗完澡皮肤看起来比较白?
C语言 求和 256
比较好朗诵的诗歌,朗诵会要朗诵诗歌,帮忙找
爱他又恨他该怎么才能永远忘掉他?
什么运动收腹啊?
有什么好的音乐播放器啊?可以直接下载歌的?
玩AU卡人妖怎么卡的
宿州萧县地区未来几天什么时候会下雨?
步步高主产是生活电器还是手机?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?