【发布时间】:2015-02-16 21:01:01
【问题描述】:
我已经研究了几个小时的 add 方法,但似乎遇到了障碍。我的方法应该搜索列表中的每个节点以查看是否有匹配的员工编号,如果没有,则按员工编号的顺序添加对象。
不幸的是,我什至无法在列表的开头或结尾添加节点。我想我明白其中的逻辑。我必须在列表中搜索我想要节点的位置,然后我所要做的就是让新节点的链接点成为已经存在的链接点。我认为我要么没有正确创建节点,要么没有正确链接它们。不过,每次我尝试测试我的代码时,我的列表中只会出现一个节点。
import java.util.*;
public class HumanResources
{
private EmployeeNode first;
employee data = new employee();
private class EmployeeNode
{
//data members of employeenode
private EmployeeNode link;
employee data = new employee();
private EmployeeNode()
{
data = null;
link = null;
}
private EmployeeNode (employee emp)
{
data = emp;
link = null;
}
}
public EmployeeNode search (employee search)
{
EmployeeNode current = first;
if (first == null)
{ return null;}
while((present != null) && (present.data != search))
{
present = present.link;
}
return present;
}
private EmployeeNode nextInList(EmployeeNode x)
{
return x.link;
}
public boolean isEmpty()
{
return ( first == null );
} // end of isEmpty()
public HumanResources()
{
first = null;
}
public HumanResources ( employee x)
{
this.data = x;
}
public boolean addEmployee( employee emp)
{
EmployeeNode current = new EmployeeNode();
current = first;
if (current == null)
{
first = new EmployeeNode(emp);
return true;
}
else
{
while(current.link != null)
{
EmployeeNode temp = new EmployeeNode();
temp.data = emp;
temp.link = current;
}
return true;
}
}
public Employee findEmployee(String EmpNumber)
{
EmployeeNode current = first;
if(first == null)
{
return null;
}
else{
while (current != null)
{
public String toString()
{
EmployeeNode display;
display = first;
String temp = "";
while(display != null)
{
temp += display.data + "\n";
display = display.link;
}
return temp;
}
}
这是我的员工类
import java.util.*;
/**
This class manipulate information relating to employees
*/
public class employee {
private String empNumber;
private String name;
private String department;
private double salary;
/**
Zero parameter constructor that sets the values to null
*/
public employee()
{
empNumber = null;
name = null;
department = null;
salary = 0.0;
}
/**
Four parameter constructor to initialize the data members to the give values
@param kempnumber Employee's ID number
@param kname Employee's name
@param kdepartment Employee's department name
@param ksalary Employee's salary
*/
public employee(String kempnumber, String kname, String kdepartment, double ksalary)
{
empNumber = kempnumber;
department=kdepartment ;
name = kname;
salary = ksalary;
}
/**
copy constructor
*/
public employee (employee copy)
{
empNumber = copy.empNumber;
name = copy.name;
department = copy.department;
salary = copy.salary;
}
/**
Four parameter constructor to set data members to given value
@param kname Employee's name
@param kdepartment Employee's department name
@param ksalary Employee's salary
*/
public void setEmployee(String kempnumber, String kname, String kdepartment, double ksalary)
{
empNumber = kempnumber;
department=kdepartment ;
name = kname;
salary = ksalary;
}
public String getEmpNumber() {
return empNumber;
}
public void setEmpNumber(String empNumber) {
this.empNumber = empNumber;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary)
{
this.salary = salary;
}
public String toString()
{
return (empNumber + " " + name + " " + department + " " +salary);
}
public boolean equals(employee compareto) {
int firstemployee = Integer.parseInt(empNumber);
int secondemployee = Integer.parseInt(compareto.empNumber);
if (firstemployee == secondemployee) {
return true;
}
else {
return false;
}
}
public int compareTo(employee compareto)
{
int less = -1;
int same = 0;
int more = 1;
int firstemployee = Integer.parseInt(empNumber);
int secondemployee = Integer.parseInt(compareto.empNumber);
if(firstemployee > secondemployee)
{
return more;
}
else if(firstemployee == secondemployee)
{
return same;
}
else
{
return less;
}
}
}
【问题讨论】:
-
while(current.link != null) { EmployeeNode temp = new EmployeeNode(); temp.data = emp; temp.link = current; }- 你目前认为这是做什么的? -
while 循环遍历整个列表直到结束。 Temp 是我要在列表中插入的节点。而且我认为 temp.link = current 将是我如何将临时节点连接到列表中的另一个节点?
-
为什么你认为while循环会遍历整个列表直到结束?你所拥有的是“当第一个节点有一个链接时(即列表至少有两个节点长),创建新节点并且不对它们做任何事情(所以它们最终会被垃圾收集)”
-
好的,所以我将条件更改为 (current != null) 并在 while 循环结束时添加 current = current.link 以保持循环循环?另外,由于创建了我的节点,问题是我没有正确地将它们相互链接?
-
在你的脑海中运行它。循环的作用与您想象的完全不同。
标签: java linked-list nodes