编写一个java程序,在主线程中再创建两个线程, 一个线程负责给出键盘上字母键上的字母(a-z之间),每个字母间隔3秒钟。 另一个线程负责让用户在控制台输入所给出的字母,如果输入正确,分数加1;如果输入错误,不加分。当输入‘#’时,退出程序。
时间: 2024-11-27 13:09:45 浏览: 12
华为Java高级面试题:用两个线程,一个输出字母,一个输出数字,交替输出1A2B3C4D…26Z
5星 · 资源好评率100%
在Java中编写这样的程序,你可以使用`Thread`类、`ScheduledExecutorService`以及`Scanner`来实现。首先,你需要创建三个线程:一个用于输出字母,一个用于接收用户输入,还有一个作为主线程管理它们。以下是简单的示例代码:
```java
import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class AlphabetGame {
private int score = 0;
private boolean exit = false;
private char currentLetter;
public static void main(String[] args) {
AlphabetGame game = new AlphabetGame();
game.runAlphabetThread();
game.runInputThread();
}
private void runAlphabetThread() {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
if (!exit && currentLetter < 'z') {
currentLetter++;
System.out.print(currentLetter);
try {
Thread.sleep(3000); // 3秒延迟
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
executor.shutdownNow(); // 当达到 'z' 或者用户输入 '#'
}
}, 0, 3, TimeUnit.SECONDS);
}
private void runInputThread() {
Scanner scanner = new Scanner(System.in);
while (!exit) {
System.out.println("请输入当前字母:" + currentLetter);
String input = scanner.nextLine();
if (input.equalsIgnoreCase(String.valueOf(currentLetter))) {
score++;
System.out.println("恭喜,正确! 得分:" + score);
} else if (input.equals("#")) {
exit = true;
break;
}
}
scanner.close();
}
// ... 其他方法和变量声明 ...
// 提供一些额外的操作,例如显示得分或关闭游戏等
public void showScore() {
System.out.println("当前得分:" + score);
}
// 更改字母顺序或结束游戏
public void endGame() {
exit = true;
}
}
```
在这个程序中,`runAlphabetThread()`负责打印字母并等待3秒,而`runInputThread()`则监听用户输入。当用户输入'#'时,`endGame()`会被调用,标志主线程应停止所有的线程活动。
阅读全文