1、编写一个java程序,在主线程中再创建两个线程,
一个线程负责给出键盘上字母键上的字母(a-z之间),每个字母间隔3秒钟。
另一个线程负责让用户在控制台输入所给出的字母,如果输入正确,分数加1;如果输入错误,不加分。当输入‘#’时,退出程序。
2、两个线程需要交互,使用线程join()方法用于等待当前线程结束
源代码:
package work12;
public class KeyboardGame {
public static int score =0;
public static boolean running = true;
public static void main(String[] args) {
// TODO Auto-generated method stub
Thread producer = new Thread(new Producer());
Thread consumer = new Thread(new Consumer());
producer.start();
consumer.start();
try {
producer.join();
consumer.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("游戏结束,最终得分为:"+score);
}
}
package work12;
import java.util.*;
public class Producer implements Runnable {
public static char C = 'a';
@Override
public void run() {
// TODO Auto-generated method stub
Random random = new Random();
while (KeyboardGame.running) {
C = (char)(random.nextInt(26)+'a');
System.out.println("请在3秒内输入字母"+C);
try {
Thread.sleep(3000);
}catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
package work12;
import java.util.*;
public class Consumer implements Runnable {
Scanner scanner = new Scanner(System.in);
@Override
public void run() {
// TODO Auto-generated method stub
while(KeyboardGame.running) {
char c = scanner.next().charAt(0);
if(c == '#') {
KeyboardGame.running = false;
break;
}
if (c == Producer.C) {
KeyboardGame.score++;
System.out.println("输入正确:目前的分:"+KeyboardGame.score);
}else {
System.out.println("输入错误!");
}
}
}
}
侵权删!