内容回顾
考试
编程题
1.编程实现双色球案例:
共8个号码,其中红球7个,范围 1-32,蓝球1个 范围是1-17
package com.gaohuan;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class DoubleColorBall {
public static void main(String[] args) {
List<Integer> redBalls = generateRedBalls(6, 1, 32);
int blueBall = generateBlueBall(1, 17);
System.out.println("红球号码:" + redBalls);
System.out.println("蓝球号码:" + blueBall);
}
// 生成红球号码
public static List<Integer> generateRedBalls(int count, int min, int max) {
List<Integer> redBalls = new ArrayList<>();
Random random = new Random();
while (redBalls.size() < count) {
int num = random.nextInt(max - min + 1) + min;
if (!redBalls.contains(num)) {
redBalls.add(num);
}
}
return redBalls;
}
// 生成蓝球号码
public static int generateBlueBall(int min, int max) {
Random random = new Random();
return random.nextInt(max - min + 1) + min;
}
}
2、按照如下要求,设计相关类、属性、方法。
分析以下需求,并用代码实现
定义项目经理类
属性:姓名 工号 工资 奖金
行为:工作work
定义程序员类
属性:姓名 工号 工资
行为:工作work
要求:向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法
设计完成将父类、项目经理类、程序员类、测试类打包提交即可
package com.gaohuan;
public abstract class Employee {
// 共有属性
protected String name;
protected String id;
protected double salary;
// 构造器
public Employee(String name, String id, double salary) {
this.name = name;
this.id = id;
this.salary = salary;
}
// 共有行为 - 工作
public abstract void work();
// getter 和 setter 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
package com.gaohuan;
public class Programmer extends Employee {
// 构造器
public Programmer(String name, String id, double salary) {
super(name, id, salary);
}
// 重写父类的work方法
@Override
public void work() {
System.out.println(name + " is coding and fixing bugs.");
}
}
package com.gaohuan;
public class ProjectManager extends Employee {
private double bonus; // 项目经理特有的奖金属性
// 构造器
public ProjectManager(String name, String id, double salary, double bonus) {
super(name, id, salary);
this.bonus = bonus;
}
// 重写父类的work方法
@Override
public void work() {
System.out.println(name + " is managing the project and earning a bonus.");
}
// getter 和 setter 方法
public double getBonus() {
return bonus;
}
public void setBonus(double bonus) {
this.bonus = bonus;
}
}
package com.gaohuan;
public class TestEmployee {
public static void main(String[] args) {
// 创建项目经理实例
ProjectManager projectManager = new ProjectManager("王五", "PM-001", 8000, 2000);
projectManager.work();
System.out.println("Project Manager's Salary: " + projectManager.getSalary());
System.out.println("Project Manager's Bonus: " + projectManager.getBonus());
// 创建程序员实例
Programmer programmer = new Programmer("李三", "PROG-001", 6000);
programmer.work();
System.out.println("Programmer's Salary: " + programmer.getSalary());
}
}
3、创建一个Map集合的对象,分别向集合中添加元素
{“name”:“野马哥”,“age”:“18”,“hoby”:“烫头”,“physiology”:“非常帅”}
并使用三种方式进行遍历集合中的元素。
package com.gaohuan;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapExample {
public static void main(String[] args) {
// 创建Map对象
Map<String, String> map = new HashMap<>();
// 向Map中添加元素
map.put("name", "野马哥");
map.put("age", "18");
map.put("hobby", "烫头");
map.put("physiology", "非常帅");
// 第一种遍历方式:使用keySet()遍历key,通过key获取value
System.out.println("遍历方式一:使用keySet()");
for (String key : map.keySet()) {
System.out.println("键: " + key + ", 值: " + map.get(key));
}
// 第二种遍历方式:使用entrySet()遍历键值对
System.out.println("遍历方式二:使用entrySet()");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("键: " + entry.getKey() + ", 值: " + entry.getValue());
}
// 第三种遍历方式:使用Map.Entry的iterator()遍历键值对
System.out.println("遍历方式三:使用Map.Entry的iterator()");
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
System.out.println("键: " + entry.getKey() + ", 值: " + entry.getValue());
}
}
}
4、编写一个简单的TCP服务器程序和一个对应的客户端程序。服务器应能够接受客户端的连接,接收客户端发送的字符串消息,并将该消息回显给客户端。客户端应能够连接到服务器,发送一条字符串消息,并接收来自服务器的响应。
package com.gaohuan;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class EchoServer {
public static void main(String[] args) {
final int PORT = 12345;
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("服务器已启动,等待客户端连接...");
// 等待客户端连接
Socket clientSocket = serverSocket.accept();
System.out.println("客户端已连接");
// 获取输入流
BufferedReader input = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
// 获取输出流
PrintWriter output = new PrintWriter(clientSocket.getOutputStream(), true);
String message;
// 循环接收和回显消息
while ((message = input.readLine()) != null) {
System.out.println("客户端发送的消息:" + message);
output.println("服务器收到消息:" + message); // 回显消息给客户端
}
// 关闭连接
clientSocket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.gaohuan;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
//客户端
public class EchoClient {
public static void main(String[] args) {
final String SERVER_IP = "localhost";
final int SERVER_PORT = 12345;
try {
// 连接服务器
Socket socket = new Socket(SERVER_IP, SERVER_PORT);
System.out.println("已连接到服务器");
// 获取输入流
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// 获取输出流
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
// 获取服务器响应流
BufferedReader serverResponse = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message;
// 循环发送和接收消息
while (true) {
System.out.print("请输入要发送的消息:");
message = input.readLine();
if (message.equals("exit")) {
break;
}
output.println(message); // 发送消息给服务器
System.out.println("服务器回复:" + serverResponse.readLine()); // 接收并打印服务器的回复
}
// 关闭连接
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}