题目:用两个线程玩猜数字游戏,第一个线程负责随机给出1~100之间的一个整数,第二个线程负责猜出这个数。要求每当第二个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,两个线程还要相互等待,其原则是:第二个线程给出自己的猜测后,等待第一个线程给出的提示;第一个线程给出提示后,等待给第二个线程给出猜测,如此进行,直到第二个线程给出正确的猜测后,两个线程进入死亡状态。
(1)代码实现
- import java.util.Random;
-
- public class GuessNumber {
-
- public static void main(String[] args) {
- number num=new number("线程一");
- num.start();
- guess gue=new guess("线程二");
- gue.start();
- }
-
- }
-
- class number extends Thread{
- String name1;
- private static int n;
- number(String name){
- name1=name;
- }
- public void run() {
-
- Random random=new Random();
- n=random.nextInt(100);
- System.out.println(name1+"给出的数字为:"+n);
- }
-
- public static String guessnum(int m) {
- if(m<n) {
- return "猜小了";
- }else if(m>n){
- return "猜大了";
- }else return "猜对了";
- }
- }
-
- class guess extends Thread{
- String name2;
-
- private int min=0,max=100,nownum;
-
- String Result;
- guess(String name){
- name2=name;
- }
-
- public String getGuess() {
- return Result;
- }
- public void run() {
- while(true) {
- try{
- Thread.sleep(2000);
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- Random ran=new Random();
-
- nownum=min+ran.nextInt(max-min);
-
- Result=number.guessnum(nownum);
- if(Result.equals("猜小了")) {
- min=nownum;
- System.out.println("线程二猜的数字是:"+nownum+"---猜小了");
- }else if(Result.equals("猜大了")) {
- max=nownum;
- System.out.println("线程二猜的数字是:"+nownum+"---猜大了");
- }else {
- System.out.println("线程二猜的数字是:"+nownum+"---猜对了,结果是"+nownum);
- System.exit(0);
- }
-
- }
- }
- }
(2)运行结果
线程一给出的数字为:79
线程二猜的数字是:42---猜小了
线程二猜的数字是:50---猜小了
线程二猜的数字是:93---猜大了
线程二猜的数字是:54---猜小了
线程二猜的数字是:81---猜大了
线程二猜的数字是:80---猜大了
线程二猜的数字是:60---猜小了
线程二猜的数字是:65---猜小了
线程二猜的数字是:79---猜对了,结果是79