package homework7_2;
import java.util.LinkedList;
import java.util.List;
/**
* 为了避免在holder类中实例化对象后又要设置head,故在WordNode中设置,为了避免死循环
* 只能在使用WordNode实例对象调用方法时,检查head是否设置,否则抛出异常。如果直接使
* 用Java JDK提供的LinkedList<T>类,将使代码量大大减少。本类模拟了LinkedList<T>部分
* 方法的实现。
* @author 秦金涛
* @version 1.0
*/
public class WordNode {
/**类的一些私有属性说明:
* @prama data:存储的单词值对
* @prama next:链表的节点
* @prama head:链表的头节点
* @prama size:链表的存储值个数
* */
private ItemSaved data;
private WordNode next = null;
private WordNode head = null;
private int size = 0;
public WordNode() {
this.setData(null);
}
/**
* 利用一个ItemSaved对象构造一个WordNode
* @param data:初始化ItemSaved值
* */
public WordNode(ItemSaved data) {
this.setData(data);
}
/**
* 利用一对英汉词对构造一个wordNode
* @param english:需要存储或查询的英文
* @param chinese:对应的中文单词
* */
public WordNode(String english, String chinese) {
data = new ItemSaved(english, chinese);
this.setData(data);
}
/**
* 根据给定的一个英文单词生成一个查询对象
* @param english : 需要查询的英文单词
* */
public WordNode(String english) {
String chinese = "";
data = new ItemSaved(english, chinese);
this.setData(data);
}
/**
* WordNode的私有方法,不能被外部对象访问和修改
* @return 无返回值
* */
private WordNode setHead() {
head = new WordNode();
return head;
}
/**
* 对于给定的一个下标查询词组,对出现的错误进行了处理。
* @param x:需要得到的词组的下标,从0开始。
* @return WordNode对象
* */
public WordNode getAt(int x) {
WordNode temp = head;
if (head == null) {
System.err.println("词库为空!!!");
temp = null;
} else if (x >= size || x < 0) {
System.err.println("查询的下标志越界!");
temp = null;
} else {
int index = 0;
while (index <= x) {
temp = temp.next;
index++;
}
}
return temp;
}
/**
* 本方法被封装,不对外提供使用。
* @param element:WordNode对象,用于添加
* @return 无返回值
* */
private void addIn(WordNode element) {
element.next = head.next;
head.next = element;
this.setSize(this.getSize() + 1);
}
/**
* 本方法将给定的英语词组存储。
* @param element:需要存储的对象
* @return boolean类型,成功为true,否则false.
* */
public boolean add(WordNode element) {
boolean flag = false;
if (head == null) {
this.setHead();
this.addIn(element);
flag = true;
} else {
this.addIn(element);
flag = true;
}
return flag;
}
/**
* 本方法通过给定的obj(WordNode)对象查询字典库是否存在相同对象。
* @param obj:需要查询的对象
* @return String:对应的汉语词组,若没有则返回空格
* */
public String check(WordNode obj) {
String result = null;
if (head == null) {
result = "";
} else {
WordNode temp = head;
while (temp != null) {
if (temp.getNext() != null && temp.getNext().equals(obj)) {
result = temp.getNext().getData().getChinese();
break;
}
temp = temp.getNext();
}
if (result == null)
result = "";
}
return result;
}
/**
* 覆写父类的toString)()方法,输出词库的单词组
* @param 无参数
* @return String : 所有词组
* */
public String toString() {
List<String> list = new LinkedList<String>();
WordNode temp = head;
while (temp != null) {
if (temp.getNext() != null) {
list.add(temp.getNext().getData().toString());
}
temp = temp.getNext();
}
return list.toString();
}
/**
* 覆写了父类中的equals()方法,用于查询对应的汉语词
* @param obj:比较的对象
* @return boolean:相同为true,否则false
* */
public boolean equals(Object obj) {
boolean flag = false;
WordNode in = (WordNode) obj;// Up cast
try {
if (this.getData().getEnglish().equals(in.getData().getEnglish())) {
flag = true;
}
} catch (Exception e) {
System.err.println("对象类型不同!");
}
return flag;
}
// 用于测试
// public static void main(String[] args) {
// WordNode list = new WordNode();
// WordNode element1 = new WordNode("USA", "美国");
// WordNode element2 = new WordNode("CN", "中国");
// WordNode element3 = new WordNode("UK", "英国");
// WordNode element4 = new WordNode("FRANCE", "法国");
// WordNode element5 = new WordNode("RUSS", "俄罗斯");
// WordNode element6 = new WordNode("GREEN", "希腊");
// WordNode element7 = new WordNode("SPAIN", "西班牙");
// WordNode element8 = new WordNode("GERMAN", "德国");
// // list.add(element1);
// System.out.println("\n----------------------------------");
// list.add(element1);
// list.add(element2);
// list.add(element3);
// list.add(element4);
// list.add(element5);
// list.add(element6);
// list.add(element7);
// list.add(element8);
// System.out.println(list.toString());
// System.out.println("第7个元素:" + list.getAt(6).getData().toString());
// WordNode element21 = new WordNode("GERMAN");
// System.out.println("查找功能验证:"+list.check(element21));
// System.out.println("存储的单词数目:"+list.getSize());
// }
/**
* 私有属性对应的一些setter和getter方法
* */
public ItemSaved getData() {
return data;
}
public void setData(ItemSaved data) {
this.data = data;
}
public WordNode getNext() {
return this.next;
}
public void setNext(WordNode next) {
this.next = next;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}
面向对象思想是软件开发中的核心概念之一,尤其在Java编程语言中被广泛应用。这个经典实例——英汉字典的设计,旨在帮助初学者理解面向对象的思维方式和软件分层模型的实践应用。 面向对象(Object-Oriented Programming,OOP)是一种编程范式,它将现实世界中的实体抽象为“对象”,每个对象都有其属性(数据)和行为(方法)。在英汉字典设计中,我们可以创建如下的对象: 1. **词汇对象**:代表单个词汇,包含英文和对应的汉语翻译,可能还有其他属性如例句、发音等。这个对象可以有`getTranslation()`、`getExampleSentence()`等方法来获取相关信息。 2. **字典对象**:管理多个词汇对象,负责存储和查找词汇。它可能包含一个词汇列表,并提供`searchWord()`方法来查找特定单词的翻译。 3. **用户接口对象**:与用户交互,接收用户的查询并显示结果。它可以包含输入处理和结果显示的方法。 软件分层模型是一种架构模式,将复杂系统分解为多个互相协作的独立层,每个层都有明确的责任。在英汉字典应用中,我们可以构建以下层次: 1. **表示层**:用户界面层,负责与用户交互,接收查询并展示结果。 2. **业务逻辑层**:处理字典的核心功能,如词汇查找、存储等。这一层包含了字典对象和词汇对象的实现。 3. **数据访问层**:负责词汇数据的存储和读取,可能包括数据库操作或者文件系统交互。 4. **接口层**:定义各层之间通信的协议,确保各层解耦合。 在实际编程中,我们可以利用Java的类和接口来实现这些层次和对象。例如,词汇对象可以通过`java.lang.Object`作为基类,然后定义自己的属性和方法;字典对象可能是一个接口,由具体的实现类完成查找功能;用户接口可以使用Java Swing或JavaFX库来构建。 学习面向对象思维和软件分层模型对于提升编程能力至关重要。面向对象使代码更易于理解和维护,而分层模型则有助于系统的扩展和复用。通过英汉字典的实例,你可以逐步理解这些概念,并在实践中不断巩固。同时,这也是一种良好的编程习惯,有助于编写出高质量、可维护的代码。所以,深入学习并掌握这些知识点,对于任何想要在IT行业发展的初学者来说,都是极其重要的。


































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 0
- 资源: 24
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- NETFORWARD-SF2507-参考原理图
- 表2.不确定性TPU 月度数据(2000.01-2023.11).xlsx
- (已更新)王者改名微信小程序源码下载
- 【毕业设计-python】python语音和背景音乐分离算法及系统(完整前后端+mysql+说明文档+LW)
- s140nrf52611_nrf52840蓝牙_nRF52840_
- 200个C语言常用函数实现代码大全.rar
- abaqus齿轮模型调试与刚度数值仿真求解,xfem裂纹扩展及磨损子程序应用,稳态瞬态温度场分析,Abaqus与Matlab联合应用:直齿轮、斜齿轮模型调试及裂纹磨损故障刚度分析,稳态瞬态温度场研究
- 基于FPGA的视频图像去雾系统的设计与实现.pdf
- 数据结构课程设计-走迷宫.pdf
- 2022年高教社杯国赛C题思路 古代玻璃制品的成分分析与鉴别4问全代码与处理结果
- 毕业设计javassm网月科技公司门户网站开发与实现+jsp源码含文档含教程
- zhudian.rar_LABVIEW 滤波_LabVIEW 滤波_labview_labview滤波_滤波labview
- ADS1248_spi_stm32_ads1248_STM32ADS1248_
- 基于PQ控制的三相并网逆变器Matlab Simulink仿真模型:采用LCL滤波与SPWM控制策略,基于PQ控制的三相并网逆变器MATLAB Simulink仿真模型-采用LCL滤波与SPWM控制
- 【LSTM分类】Transformer-LSTM分类预测【含Matlab源码 9882期】.zip
- 基于PLC的升降机控制系统设计毕业设计.doc


