Другая проблема с реализацией LinkedList с другим классом - PullRequest
0 голосов
/ 20 марта 2012

Класс работника:

public class Employee
{

String ID;
String Fname;
String Lname;
String City;
String Major;
int GPA;

    public Employee()
{
    GPA = 0;
}


public void ShowInfo()
{
    JOptionPane.showMessageDialog(null, "ID: " + ID + "\nFirst Name: " + Fname + "\nLast Name:" + Lname + "\nCity: " + City + "\nMajor: " + Major + "\nGPA: " + GPA); 
}

public void EnterInfo()
{

    ID = JOptionPane.showInputDialog("Enter Student ID");
    Fname = JOptionPane.showInputDialog("Enter Student First Name");
    Lname = JOptionPane.showInputDialog("Enter Student Last Name");
    City = JOptionPane.showInputDialog("Enter Student City");
    Major = JOptionPane.showInputDialog("Enter Student Major");
    String gpa = JOptionPane.showInputDialog("Enter Student GPA");
    GPA = Integer.parseInt(gpa);
}

  }
}

Связанный список:

public class EmployeeList
{
Node first;
Node last;
int count;


public EmployeeList()
{
    first = new Node();
    first = null;

    last = new Node();
    last = null;

    count = 0;
}

public boolean empty()
{
    return first == null;
}

public void add(Employee emp)
{
    Node newEmployee = new Node();
    newEmployee.e = emp;
    newEmployee.e.EnterInfo();
    newEmployee.next=null;

    if(empty())
    {
        first=newEmployee;
        last=first;
    }       

    else  
    {
        last.next = newEmployee; 
        last = last.next;
    }

    count++;
}

public boolean search(String id)
{
    Node temp = new Node();
    Employee emp = new Employee();
    temp = first;

    while(temp!=null)
    {
        emp = temp.e;
        if(id.equals(emp.ID)) 
        {
            emp.ShowInfo();
            return true;
        }

        temp=temp.next;
    }  
    return false;  
 }

public boolean delete(String id)
{
    Employee emp = new Employee();

    if(!empty())
    { 
        if(first.e.ID.equals(id))
        { 
            first=first.next; 
            return true; 
        }
        else
        {
            Node previous = new Node();
            Node temp = new Node();

            previous = first;
            temp = first.next;

            while(temp!=null)
            {   
                emp = temp.e;

                if(id.equals(emp.ID))
                {
                    count--;
                    previous.next = temp.next;
                    return true;
                }

                previous = previous.next;
                temp = temp.next;
            }  

            return false;
        }
    }

return false;
}

public String ALL()
{
    String all = new String();
    Node temp = new Node();
    Employee emp = new Employee();

    temp = first;

    while(temp!=null)
    {
        emp = temp.e;
        all = all + emp.ID + "-";
        temp = temp.next;
    } 

    all = all + "null";

    return all;
} 

}

Я действительно не знаю, в чем здесь проблема. Если я пытаюсь распечатать их все, я получаю последнее введенное значение.

Класс узла:

public class Node
{
Employee e = new Employee();
Node next;
}

При поиске я не получаю никакого результата, просто идентификатор сотрудника не найден. Метод EnterInfo предназначен только для ввода переменных (ID, Fname .....)

Любая помощь? и спасибо.

Редактировать: я знаю, что это неправильно, я должен добавить геттеры и сеттеры, но именно так учитель начал и сказал нам начинать так.

1 Ответ

2 голосов
/ 20 марта 2012

Ваш поиск не удался, потому что вы неправильно проверяете равенство строк.Эта строка:

if(emp.ID == id)

Проверяет равенство ссылок на объекты.Он будет работать только для интернированных значений (что выходит за рамки вашего назначения).Вы также должны изменить его:

if(id.equals(emp.ID))

Несколько быстрых примечаний к вашему коду:

  • Вы не следуете передовым методам именования.Ваши переменные должны начинаться со строчных букв.
  • Вы не следуете передовой практике в области определения свойств.Ваши переменные класса должны быть приватными, с соответствующими методами получения / установки
  • В начале вашего метода поиска вы создаете ненужный экземпляр Node

    Node temp = new Node ();

  • Вы неправильно проверяете равенство строк в своем методе delete.

...