本文目录导读:

我为您提供一个完整的Java机器人案例,包含多种经典实现,从简单到复杂:
基础机器人(控制台版)
// 简单的机器人控制台案例
public class SimpleRobot {
private String name;
private int x;
private int y;
private String direction;
public SimpleRobot(String name) {
this.name = name;
this.x = 0;
this.y = 0;
this.direction = "NORTH";
}
public void move() {
switch (direction) {
case "NORTH": y++; break;
case "SOUTH": y--; break;
case "EAST": x++; break;
case "WEST": x--; break;
}
System.out.println(name + " 移动到 (" + x + ", " + y + ")");
}
public void turnLeft() {
switch (direction) {
case "NORTH": direction = "WEST"; break;
case "WEST": direction = "SOUTH"; break;
case "SOUTH": direction = "EAST"; break;
case "EAST": direction = "NORTH"; break;
}
System.out.println(name + " 转向 " + direction);
}
public void turnRight() {
switch (direction) {
case "NORTH": direction = "EAST"; break;
case "EAST": direction = "SOUTH"; break;
case "SOUTH": direction = "WEST"; break;
case "WEST": direction = "NORTH"; break;
}
System.out.println(name + " 转向 " + direction);
}
public static void main(String[] args) {
SimpleRobot robot = new SimpleRobot("R2-D2");
robot.move();
robot.turnRight();
robot.move();
robot.turnLeft();
robot.move();
}
}
智能聊天机器人
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Random;
public class ChatBot {
private String name;
private Map<String, String[]> responses;
private Random random;
public ChatBot(String name) {
this.name = name;
this.random = new Random();
initializeResponses();
}
private void initializeResponses() {
responses = new HashMap<>();
responses.put("hello", new String[]{
"你好!我是" + name + ",很高兴见到你!",
"嗨!有什么我可以帮助你的吗?",
"你好!今天过得怎么样?"
});
responses.put("how are you", new String[]{
"我很好,谢谢关心!你怎么样?",
"状态不错!感谢你问道。",
"作为一个机器人,我总是充满活力!"
});
responses.put("name", new String[]{
"我叫" + name + "!",
"我是" + name + ",很高兴认识你!"
});
responses.put("bye", new String[]{
"再见!希望很快再见到你!",
"拜拜!祝你有个美好的一天!",
"再见!我会想你的!"
});
responses.put("default", new String[]{
"我不太明白你的意思,能换个说法吗?",
"这个话题我不太熟悉,我们能聊点别的吗?",
"请告诉我更多关于这个的信息。"
});
}
public String getResponse(String input) {
String lower = input.toLowerCase();
// 关键词匹配
if (lower.contains("hello") || lower.contains("hi")) {
return getRandomResponse("hello");
} else if (lower.contains("how are you")) {
return getRandomResponse("how are you");
} else if (lower.contains("name")) {
return getRandomResponse("name");
} else if (lower.contains("bye") || lower.contains("goodbye")) {
return getRandomResponse("bye");
} else {
return getRandomResponse("default");
}
}
private String getRandomResponse(String key) {
String[] responsesArray = responses.get(key);
int index = random.nextInt(responsesArray.length);
return responsesArray[index];
}
public static void main(String[] args) {
ChatBot bot = new ChatBot("小智");
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到聊天机器人!输入 'exit' 退出。");
System.out.println("=====================================");
while (true) {
System.out.print("你: ");
String input = scanner.nextLine();
if (input.equalsIgnoreCase("exit")) {
System.out.println("再见!");
break;
}
String response = bot.getResponse(input);
System.out.println(bot.name + ": " + response);
}
scanner.close();
}
}
完整机器人系统(面向对象设计)
import java.util.ArrayList;
import java.util.List;
// 传感器接口
interface Sensor {
String getData();
}
// 执行器接口
interface Actuator {
void execute(String command);
}
// 机器人基类
abstract class Robot {
protected String name;
protected int batteryLevel;
protected boolean isActive;
protected List<Sensor> sensors;
protected List<Actuator> actuators;
public Robot(String name) {
this.name = name;
this.batteryLevel = 100;
this.isActive = false;
this.sensors = new ArrayList<>();
this.actuators = new ArrayList<>();
}
public void addSensor(Sensor sensor) {
sensors.add(sensor);
System.out.println("添加传感器: " + sensor.getClass().getSimpleName());
}
public void addActuator(Actuator actuator) {
actuators.add(actuator);
System.out.println("添加执行器: " + actuator.getClass().getSimpleName());
}
public void start() {
if (batteryLevel > 0) {
isActive = true;
System.out.println(name + " 已启动");
} else {
System.out.println(name + " 电池电量不足,无法启动");
}
}
public void stop() {
isActive = false;
System.out.println(name + " 已停止");
}
public void recharge() {
batteryLevel = 100;
System.out.println(name + " 已充满电");
}
public void readSensors() {
if (!isActive) {
System.out.println(name + " 未启动,无法读取传感器数据");
return;
}
System.out.println(name + " 传感器数据:");
for (Sensor sensor : sensors) {
System.out.println("- " + sensor.getData());
}
}
public abstract void performTask();
}
// 温度传感器
class TemperatureSensor implements Sensor {
private double temperature;
public TemperatureSensor() {
this.temperature = 20.0;
}
@Override
public String getData() {
temperature += (Math.random() - 0.5) * 2;
return "温度: " + String.format("%.1f", temperature) + "°C";
}
}
// 距离传感器
class DistanceSensor implements Sensor {
private int distance;
public DistanceSensor() {
this.distance = 100;
}
@Override
public String getData() {
distance = (int)(Math.random() * 200);
return "距离: " + distance + "cm";
}
}
// 电机执行器
class MotorActuator implements Actuator {
@Override
public void execute(String command) {
System.out.println("电机执行: " + command);
}
}
// 机械臂执行器
class ArmActuator implements Actuator {
@Override
public void execute(String command) {
System.out.println("机械臂执行: " + command);
}
}
// 具体机器人实现
class CleaningRobot extends Robot {
public CleaningRobot() {
super("清洁机器人");
addSensor(new DistanceSensor());
addActuator(new MotorActuator());
}
@Override
public void performTask() {
if (isActive) {
System.out.println(name + " 正在清洁地板...");
// 模拟清洁动作
for (Actuator actuator : actuators) {
actuator.execute("移动和清洁");
}
batteryLevel -= 10;
System.out.println("清洁完成,电量剩余: " + batteryLevel + "%");
}
}
}
class CookingRobot extends Robot {
public CookingRobot() {
super("烹饪机器人");
addSensor(new TemperatureSensor());
addActuator(new ArmActuator());
}
@Override
public void performTask() {
if (isActive) {
System.out.println(name + " 正在准备料理...");
for (Actuator actuator : actuators) {
actuator.execute("混合食材");
}
batteryLevel -= 15;
System.out.println("料理完成,电量剩余: " + batteryLevel + "%");
}
}
}
// 主测试类
public class RobotDemo {
public static void main(String[] args) {
System.out.println("===== 机器人演示系统 =====");
System.out.println();
// 创建清洁机器人
System.out.println("--- 清洁机器人 ---");
CleaningRobot cleaningRobot = new CleaningRobot();
cleaningRobot.start();
cleaningRobot.performTask();
cleaningRobot.readSensors();
System.out.println();
// 创建烹饪机器人
System.out.println("--- 烹饪机器人 ---");
CookingRobot cookingRobot = new CookingRobot();
cookingRobot.start();
cookingRobot.performTask();
cookingRobot.readSensors();
System.out.println();
// 电量不足演示
System.out.println("--- 电量管理 ---");
cleaningRobot.performTask();
cleaningRobot.stop();
cleaningRobot.recharge();
cleaningRobot.start();
cleaningRobot.stop();
// 批量操作
System.out.println("\n--- 批量机器人操作 ---");
List<Robot> robots = new ArrayList<>();
robots.add(cleaningRobot);
robots.add(cookingRobot);
for (Robot robot : robots) {
System.out.println(robot.name + " 电池状态: " + robot.batteryLevel + "%");
}
}
}
图形界面机器人模拟器
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
public class RobotSimulator extends JPanel {
private int robotX = 200;
private int robotY = 200;
private String direction = "RIGHT";
private int stepSize = 10;
public RobotSimulator() {
setPreferredSize(new Dimension(400, 400));
setBackground(Color.WHITE);
setFocusable(true);
addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
robotY -= stepSize;
direction = "UP";
break;
case KeyEvent.VK_DOWN:
robotY += stepSize;
direction = "DOWN";
break;
case KeyEvent.VK_LEFT:
robotX -= stepSize;
direction = "LEFT";
break;
case KeyEvent.VK_RIGHT:
robotX += stepSize;
direction = "RIGHT";
break;
}
repaint();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// 绘制网格
g.setColor(Color.LIGHT_GRAY);
for (int i = 0; i < getWidth(); i += 20) {
g.drawLine(i, 0, i, getHeight());
g.drawLine(0, i, getWidth(), i);
}
// 绘制机器人
g.setColor(Color.BLUE);
g.fillOval(robotX - 20, robotY - 20, 40, 40);
// 绘制方向指示
g.setColor(Color.RED);
g.fillOval(robotX - 5, robotY - 5, 10, 10);
// 显示坐标和方向
g.setColor(Color.BLACK);
g.drawString("位置: (" + robotX + ", " + robotY + ")", 10, 20);
g.drawString("方向: " + direction, 10, 40);
g.drawString("使用方向键移动机器人", 10, 60);
}
public static void main(String[] args) {
JFrame frame = new JFrame("机器人模拟器");
RobotSimulator simulator = new RobotSimulator();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(simulator, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
simulator.requestFocus();
}
}
运行说明
编译运行
# 编译 javac SimpleRobot.java javac ChatBot.java javac RobotDemo.java javac RobotSimulator.java # 运行(任选一个) java SimpleRobot java ChatBot java RobotDemo java RobotSimulator
功能特点
| 案例 | 主要特点 | 适用场景 |
|---|---|---|
| SimpleRobot | 简单移动控制 | 学习基本语法 |
| ChatBot | 关键词匹配回答 | 了解自然语言处理 |
| RobotDemo | 面向对象设计 | 学习设计模式 |
| RobotSimulator | 图形界面交互 | 学习GUI编程 |
这些案例涵盖了Java的核心概念,包括面向对象、接口、集合、异常处理、GUI编程等,适合不同水平的学习者,您可以根据需要修改和扩展这些案例。