步骤 1 只用Java类能实现吗?
以我目前掌握的Java技能,只知道可以新建Java类,然后在Java类里面写属性和方法。现在我已经有了顾客类,我可以通过这个类new出很多个顾客对象。但是问题来了,我怎么保存这些对象呢?
比如今天有10个顾客来登记信息,我必须得有一个东西,来装这些顾客对象啊。
哎呀真搞不懂老板怎么想的,直接用小本子记下来不就行了吗,非要做什么系统。
不过现如今只能好好想想了,emmm,我可以只用Java类实现吗?
步骤 2 类里面有顾客属性
嗯,目标是明确的,我需要写一个Java类,然后这个类可以存放顾客的信息。我在tool文件夹里面随便写了一个CustNode.java(意思就是顾客的节点类):
代码如下:
package tool; import entity.Customer; class CustNode{ public Customer data; }
CustNode类里面维护一个顾客的属性,为了方便起见,就直接用public了,反正我们自己用用的,无所谓。
步骤 3 排队打饭
可是这样也没用啊,这个类最多就是维护一个顾客的信息,没办法保存多个顾客啊。这可愁死我啦,想了老半天也没想出办法来。于是,我就去请教老板,老板正在炒菜,没空搭理我,但是也没赶我走。
“这样吧,马上会有很多顾客来取餐,想不出来就先放放,你在这帮我看着。”老板说。
“让我看排队啊,这有啥意思哦?”我虽然满腹牢骚,但还是照做了,一边拿出手机刷刷微博,一 边看着顾客在排队取餐。
没想到,看着看着,我突然有了灵感。
步骤 4 从一个顾客联系到另一个顾客
顾客A,B,C三个人在排队,顾客A知道他前面的是顾客B,顾客B知道他前面的是顾客C。那么从程序的角度来看,A里面肯定有一个属性是B的引用,B里面肯定有一个属性是C的引用。
那么,我只要在CustNode里面维护下一个数据的引用,不就可以实现在一个类里面保存多个顾客了吗?
步骤 5 加一个next字段
class CustNode{ public Customer data; public CustNode next; }
next就代表下一个数据。
步骤 6 有参构造方法
为了方便起见,我写一个有参数的构造方法,这样的好处就是new的时候直接就可以给data赋值了。
class CustNode{ public Customer data; public CustNode next; public CustNode(Customer data){ this.data = data; } }
步骤 7 用一个新的类维护CustNode
我盯着CustNode类看了半天,发现一个事情,就是如果我用这个类,最多只能装两个顾客,一个data,一个next。如果再装,就有点难度了。所以,我需要再写一个类,来维护CustNode,然后再提供一个一个add方法和display方法,分别用来添加和展示顾客的数据。
我憋了半天终于把代码写出来了。
步骤 8 TuziLinkedList.java
package tool; import entity.Customer; import tool.CustNode; public class TuziLinkedList{ public CustNode firstNode; //第一个节点 public CustNode currentNode;//当前的节点 //新增的方法 public void add(Customer cst){ //将数据用节点类包装好,这样才能实现下一个数据的指向 CustNode data = new CustNode(cst); //先判断是否是第一个节点 if(this.firstNode == null){ this.firstNode = data; this.currentNode = data; }else{ //不是第一个节点,就指向当前节点的下一个节点,即currentNode.next this.currentNode.next = data; //因为已经指向下一个了,所以当前节点也要移动过来 this.currentNode = data; } } //展示所有节点 public void display(){ //第一步,肯定是展示第一个节点(this其实可以省略的) if(firstNode != null){ System.out.println(firstNode.data.getName()); //然后循环,一直寻找next是否为空 CustNode node = firstNode.next; while(node != null ){ String name = node.data.getName(); System.out.println(name); //循环的最后,再指向下一个节点,继续下一轮 node = node.next; } } } }
步骤 9 设计思路
步骤 10 原来这就是单链表
后来查了资料才知道,哦,原来这个属于一种数据结构,叫做链表结构。
步骤 11 Customer.java
我修改了一些类的访问权限和代码,顾客类针对name增加了get方法和set方法。
package entity; public class Customer { String name; // 客户姓名 String sex; //性别 String birthDate; //生日 String phoneNumber; //电话号码 int status; //客户状态(1:正常,2:不正常) static String version = "1.0"; public Customer(){ } public void eat(){ System.out.println(this.name + " eating..."); } public static void pay(){ System.out.println(" paying..."); } public String getName(){ return name; } public void setName(String name){ this.name = name; } }
步骤 12 Application.java
import static tool.StringUtil.*; import entity.*; import tool.*; public class Application { public static void main(String[] args){ newLine("******欢迎使用兔子餐厅会员系统******"); Customer c1 = new Customer(); c1.setName("鲁班七号" ); Customer c2 = new Customer(); c2.setName("后裔"); Customer c3 = new Customer(); c3.setName("马克波罗"); TuziLinkedList list = new TuziLinkedList(); list.add(c1); list.add(c2); list.add(c3); list.display(); } }