编写Java程序单击按键以后龟兔开始赛跑
时间: 2023-05-15 16:07:54 浏览: 142
好的,这是一个有趣的问题。为了编写这个程序,我们需要使用 Java 的图形用户界面(GUI)库,比如 Swing 或 JavaFX。我们可以创建一个窗口,里面包含一个“开始赛跑”按钮和两个动物图像,一个是龟,一个是兔。当用户单击“开始赛跑”按钮时,我们可以使用 Java 的多线程机制来模拟龟兔赛跑的过程。我们可以创建两个线程,一个代表龟,一个代表兔,它们可以在窗口中移动,并且我们可以使用随机数来模拟它们的速度和停顿。当其中一个动物到达终点时,我们可以停止两个线程并显示获胜者的消息。这是一个简单的思路,当然还需要更多的细节和代码来实现这个程序。
相关问题
编写Java程序一个龟兔赛跑的多线程程序,单击按键以后龟兔开始赛跑
以下是一个简单的Java多线程程序,实现了龟兔赛跑的功能:
```java
public class TurtleRabbitRace extends JFrame implements ActionListener {
private JButton btnStart;
private JTextArea txtOutput;
private JScrollPane scrollPane;
private JPanel panel;
private Rabbit rabbit;
private Turtle turtle;
private boolean raceStarted;
public TurtleRabbitRace() {
super("Turtle and Rabbit Race");
// 创建UI界面
setSize(500, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
btnStart = new JButton("Start Race");
btnStart.addActionListener(this);
txtOutput = new JTextArea();
txtOutput.setEditable(false);
scrollPane = new JScrollPane(txtOutput);
panel = new JPanel();
panel.add(btnStart);
add(panel, BorderLayout.NORTH);
add(scrollPane, BorderLayout.CENTER);
setVisible(true);
}
// 实现ActionListener接口
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnStart) {
if (!raceStarted) {
raceStarted = true;
txtOutput.setText("");
rabbit = new Rabbit(txtOutput);
turtle = new Turtle(txtOutput);
rabbit.start();
turtle.start();
}
}
}
// 兔子线程
class Rabbit extends Thread {
private JTextArea txtOutput;
private int position;
public Rabbit(JTextArea txtOutput) {
this.txtOutput = txtOutput;
position = 0;
}
public void run() {
while (position < 100) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
position += 3;
txtOutput.append("Rabbit: " + position + "\n");
}
txtOutput.append("Rabbit finished the race!\n");
}
}
// 乌龟线程
class Turtle extends Thread {
private JTextArea txtOutput;
private int position;
public Turtle(JTextArea txtOutput) {
this.txtOutput = txtOutput;
position = 0;
}
public void run() {
while (position < 100) {
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
position += 1;
txtOutput.append("Turtle: " + position + "\n");
}
txtOutput.append("Turtle finished the race!\n");
}
}
public static void main(String[] args) {
new TurtleRabbitRace();
}
}
```
在这个程序中,我们创建了一个JFrame窗口,包含一个按钮和一个文本框。单击按钮后,我们创建了两个线程,一个是兔子线程,一个是乌龟线程,它们分别模拟了兔子和乌龟的赛跑过程。在每个线程中,我们使用Thread.sleep方法来模拟每个动物移动的时间间隔,并在文本框中输出它们的位置。当任何一个动物到达终点时,我们在文本框中输出相应的消息。
需要注意的是,我们使用了一个boolean变量raceStarted来确保每次只创建一个赛跑的实例。当用户单击按钮以开始比赛时,我们首先检查这个变量是否为false,如果是,就创建两个线程,并将raceStarted设置为true。这样可以避免用户多次单击按钮导致多个比赛实例同时运行的问题。
Java编程编写一个龟兔赛跑的多线程程序,单击按键以后龟兔开始赛跑
这是一个简单的龟兔赛跑多线程程序,点击“开始赛跑”按钮后,龟兔开始在轨道上赛跑,其中兔子有80%的概率在每秒钟内走两步,20%的概率休息一秒钟;乌龟每秒钟走一步。程序会在任意一只动物走过终点时停止。
```
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Race extends JFrame implements ActionListener {
private JButton startButton;
private JTextArea raceTrack;
private Rabbit rabbit;
private Turtle turtle;
public static void main(String[] args) {
Race race = new Race();
race.setVisible(true);
}
public Race() {
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
setTitle("Race");
setSize(400, 400);
startButton = new JButton("开始赛跑");
startButton.addActionListener(this);
JPanel buttonPanel = new JPanel();
buttonPanel.add(startButton);
raceTrack = new JTextArea();
JScrollPane scrollPane = new JScrollPane(raceTrack);
Container contentPane = getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.add(buttonPanel, BorderLayout.PAGE_START);
contentPane.add(scrollPane, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == startButton) {
startRace();
}
}
public void startRace() {
raceTrack.setText("");
rabbit = new Rabbit();
turtle = new Turtle();
rabbit.start();
turtle.start();
}
private class Rabbit extends Thread {
public void run() {
int distance = 0;
while (distance < 100) {
if (Math.random() < 0.8) {
distance += 2;
} else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
updateRace(distance, "兔子");
}
finishRace("兔子");
}
}
private class Turtle extends Thread {
public void run() {
int distance = 0;
while (distance < 100) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
distance += 1;
updateRace(distance, "乌龟");
}
finishRace("乌龟");
}
}
private synchronized void updateRace(int distance, String animalName) {
raceTrack.append(animalName + "前进了" + distance + "米。\n");
if (distance >= 100) {
finishRace(animalName);
}
}
private synchronized void finishRace(String winner) {
raceTrack.append("结束!" + winner + "赢了!\n");
if (rabbit != null) {
rabbit.interrupt();
rabbit = null;
}
if (turtle != null) {
turtle.interrupt();
turtle = null;
}
}
}
```
阅读全文