Week4 互评作业 (接口、抽象类练习)

本文展示了一个使用Java编写的飞翔接力游戏程序。通过定义接口、抽象类和具体类,实现了多个可飞翔对象的接力飞行过程。涉及setter/getter、static、final、abstract和@Override等语法,展示了面向对象编程的实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编写一个小的程序,其中定义一些接口、类、抽象类,定义它们的成员(字段及方法), 要求使用使用setter/getter, static, final, abstract,@Override等语法要素,并写一个main函数来使用它们。这些类、接口可以是围绕以下选题之一

飞翔世界:来一次飞翔接力(即多个可飞翔的对象依次调用);

动物世界:来一次吃西瓜大赛;

图书馆:模拟一天的借阅过程;

学校:模拟选课过程;

等等

package week4;

public class FlyGame {
	public static void main(String[] args) {
		Bird bird1 = new Bird();
		bird1.setFlyDistance(10);
		bird1.setType("dujuan");
		Bird bird2 = new Bird();
		bird1.setFlyDistance(20);
		bird1.setType("bugu");
		AirPlane air1 = new AirPlane();
		air1.setFlyDistance(1000);
		air1.setName("by747");
		AirPlane air2 = new AirPlane();
		air2.setFlyDistance(2000);
		air2.setName("dafeiji");
		System.out.println("飞行接力开始");
		air1.fly();
		bird1.fly();
		bird2.fly();
		air2.fly();
		
	}
}

interface flyable{
	void fly();
}

abstract class animal {
	public void eat(){}
	public void sleep(){}
	
}
//鸟类继承动物类,并有飞的能力
class Bird extends animal implements flyable{
	private String type;
	private double flyDistance;
	public String getType() {
		return type;
	}
	public void setType(String type) {
		this.type = type;
	}
	public double getFlyDistance() {
		return flyDistance;
	}
	public void setFlyDistance(double flyDistance) {
		this.flyDistance = flyDistance;
	}
	public static final int maxFlyDistance=100;
	@Override
	public void fly() {
		System.out.println(type+"起飞");
		System.out.println("我飞"+flyDistance+"m");
		System.out.println("降落");
	}
	
}
//飞机实现飞行接口
class AirPlane implements flyable{
	private String name;
	private double flyDistance;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public double getFlyDistance() {
		return flyDistance;
	}
	public void setFlyDistance(double flyDistance) {
		this.flyDistance = flyDistance;
	}
	@Override
	public void fly() {
		System.out.println(name+"起飞");
		System.out.println("我飞"+flyDistance+"m");
		System.out.println("降落");		
		
	}
	
}

### 山东大学程序设计 Week4 作业题目解决方案 关于山东大学程序设计课程的 Week4 作业,虽然当前提供的引用并未直接提及 Week4 的具体内容[^1],但从类似的编程竞赛和算法训练来看,Week4 很可能涉及图论基础、最短路径计算或者动态规划等内容。以下是基于常见 Week4 主题的一个假设性解答框架。 #### 假设主题:单源最短路径问题 如果 Week4 的重点在于 **单源最短路径** 计算,则可以采用 Dijkstra 或 Bellman-Ford 算法解决。以下是一个典型的实现: ```python import heapq def dijkstra(graph, start): n = len(graph) distances = [float('inf')] * n distances[start] = 0 pq = [(0, start)] while pq: dist_u, u = heapq.heappop(pq) if dist_u > distances[u]: continue for v, weight in graph[u]: alt = dist_u + weight if alt < distances[v]: distances[v] = alt heapq.heappush(pq, (alt, v)) return distances # 示例输入 n = 5 # 节点数 edges = [ (0, 1, 2), (0, 2, 4), (1, 2, 1), (1, 3, 7), (2, 4, 3), (3, 4, 1) ] graph = [[] for _ in range(n)] for u, v, w in edges: graph[u].append((v, w)) graph[v].append((u, w)) # 如果是无向图 start_node = 0 result = dijkstra(graph, start_node) print(result) # 输出各节点到起点的距离 ``` 上述代码实现了 Dijkstra 算法来寻找从某个起始节点出发到达其他所有节点的最短距离。此方法适用于加权有向/无向图中的正权重边场景。 #### 假设主题:拓扑排序与关键路径 另一种可能性是 Week4 涉及 **拓扑排序** 和 **关键路径** 的相关内容。下面提供了一个简单的拓扑排序实现: ```python from collections import defaultdict, deque def topological_sort(edges, num_nodes): adj_list = defaultdict(list) indegree = {i: 0 for i in range(num_nodes)} for src, dest in edges: adj_list[src].append(dest) indegree[dest] += 1 queue = deque([node for node in indegree if indegree[node] == 0]) result = [] while queue: current = queue.popleft() result.append(current) for neighbor in adj_list[current]: indegree[neighbor] -= 1 if indegree[neighbor] == 0: queue.append(neighbor) if len(result) != num_nodes: return [] # 存在环路 return result # 示例输入 num_nodes = 6 edges = [(5, 2), (5, 0), (4, 0), (4, 1), (2, 3), (3, 1)] sorted_order = topological_sort(edges, num_nodes) if sorted_order: print(sorted_order) # 输出拓扑顺序 else: print("存在循环依赖") ``` 这段代码展示了如何通过 BFS 实现拓扑排序,并检测是否存在环路。 #### 结合实际需求调整解法 由于具体题目未完全明确,建议参考 Week7 中提到的相关概念并适当迁移至 Week4 的上下文中。例如,在 Week7 提到了税费最小化的问题[^2],这可能是某种形式的成本优化或路径选择问题。因此,可尝试将这些思路应用于 Week4练习中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值