线程--猜数字

来源:互联网 发布:淘宝客佣金计算规则 编辑:程序博客网 时间:2024/06/11 09:45

题目:用两个线程玩猜数字游戏,第一个线程负责随机给出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() {//获取1~100的随机数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);//调用给出整数的线程 的猜数字方法guessnum,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



原创粉丝点击