2011-06-06 44 views
2
public static void check(){ 
     String name; 
     System.out.println("Enter Customer Name to CHECK RESERVATION ticket for this Flight: "); 
     Scanner input = new Scanner(System.in); 
     name = input.nextLine(); 
     if (list.contains(name)) { //WHY IS THIS ASKING FOR SEPARATE METHOD? 
      System.out.println(name +" has a Reservation on this FLight!"); 
      menu(); 
     } 

我想输入并检查输入是否在链接列表中。尽管如此,我仍然遇到问题。JAVA链接列表混淆为什么我无法检查链接列表中的节点变量?

如果我在我的LinkedList.Java类中添加新方法,它说它需要为链接定义一个变量。下面是我的全部,如果有帮助:

import java.util.Scanner; 
class airline { 
public static LinkedList list = new LinkedList(); 

    public static void main(String[] args) { 

     list.addAirplane("Allen",501); 
     list.addAirplane("James",501); 
     list.addAirplane("Andrea",501); 
     list.addAirplane("Velvett",501); 
     list.addAirplane("Paul",501); 

     //Method sort the list after year the car was made 
     list.sortList(); 
     menu(); 


     //Method to print all objects in List 
     System.out.println(list.viewAll()); 

    } 


    public static void menu(){ 
     int menuOpt; 

     System.out.println("Airline Menu:"); 
     System.out.println("1. Reserve a Ticket"); 
     System.out.println("2. Cancel Reservations"); 
     System.out.println("3. Check Reservations"); 
     System.out.println("4. Display Airplanes on Flights"); 
     Scanner input = new Scanner(System.in); 
     menuOpt=input.nextInt(); 
     System.out.println(menuOpt); 


     switch (menuOpt){ 
     case 1: 
      System.out.println("Reserve a Ticket"); 
      reserveTick(); 
      break; 

     case 2: 
      System.out.println("Cancel Reservations"); 
      cancel(); 
      break; 

     case 3: 
      System.out.println("Check Reservations"); 
      check(); 
      break; 

     case 4: 
      System.out.println("Passengers listed by Flights"); 
      break; 

     default: 
      System.out.println("INVALID RESPONSE!"); 
      menu(); 
      break; 
     } 
    } 

    public static void reserveTick(){ 
     String name; 
     System.out.println("Enter Customer Name to RESERVE ticket for this Flight: "); 
     Scanner input = new Scanner(System.in); 
     name = input.nextLine(); 
     list.addAirplane(name,501); 
     System.out.println(name + " has been added to Flight Number 501"); 
     menu(); 
    } 

    public static void cancel(){ 
     String name; 
     System.out.println("Enter Customer Name to CANCEL ticket for this Flight: "); 
     Scanner input = new Scanner(System.in); 
     name = input.nextLine(); 

     list.remove(name, 501); 
     System.out.println(name + " has been REMOVED from Flight Number 501"); 
     menu(); 
    } 

    public static void check(){ 
     String name; 
     System.out.println("Enter Customer Name to CHECK RESERVATION ticket for this Flight: "); 
     Scanner input = new Scanner(System.in); 
     name = input.nextLine(); 
     if (list.contains(name)) { 
      System.out.println(name +" has a Reservation on this FLight!"); 
      menu(); 
     } 
     else { 
      System.out.println(name + " is not on this Flight!"); 
      menu(); 
     } 
    } 
    public static void listpassengers(){ 
     list.sortList(); 
    } 

} 

------------------------------------------------------------------ 



import java.util.*; 
public class LinkedList 
{ 

    private AirplaneNode head = null; 

    public void addAirplane(String name , int hk) 
    {  
     //If head = null then create the first node 
     if(head == null) 
     { 
      head = new AirplaneNode(name,hk,null); 
     } 
     else 
     { 
      //If there are more than 1 node 
      head = new AirplaneNode(name,hk,head);    
     } 

    } 


    public void sortList() 
    { 

     boolean sorted = false; 

     while(!sorted) 
     { 

      sorted = true; 

      for(AirplaneNode cursor = head ; cursor.getNext() != null ; cursor = cursor.getNext()) 
      { 
       if(cursor.getHk() < cursor.getNext().getHk()) 
       { 
        String n = cursor.getName(); 
        int hk = cursor.getHk(); 

        cursor.setName(cursor.getNext().getName()); 
        cursor.setHk(cursor.getNext().getHk()); 

        cursor.getNext().setName(n); 
        cursor.getNext().setHk(hk); 

        sorted = false;   
       } 


      } 


     } 



    } 


    public String viewAll() 
    { 

     StringBuffer str = new StringBuffer();  

     for(AirplaneNode cursor = head ; cursor != null ; cursor = cursor.getNext()) 
     { 

      str.append(cursor+"\n"); 
     } 
     return new String(str); 

    }  
} 
-------------------------------------------------------------- 
public class AirplaneNode 
{ 
    private String name; 
    private int hk; 
    private AirplaneNode next; 

    public AirplaneNode(String name,int hk,AirplaneNode head) 
    { 
     this.name = name; 
     this.hk = hk; 
     this.next = head; 

    } 



    public AirplaneNode getNext() 
    { 
     return next; 
    } 

    public String getName() 
    { 
     return name; 
    } 

    public int getHk() 
    { 
     return hk; 
    } 

    public void setName(String in) 
    { 
     name = in; 
    } 

    public void setHk(int in) 
    { 
     hk = in; 
    } 


    public String toString() 
    { 
     return name + " " + hk ; 
    } 

} 

回答

3

看来,如果要创建在顶部封装这里自己的LinkedList类:

import java.util.*; 
public class LinkedList 
{ 

因为你的方法检查()所属的航空类在同一个包(和不带Java的任何进口.util.LinkedList)它将使用您创建的类,并且该类不会实现任何contains()方法。

1

声明你的链表是这样的:

public static LinkedList<String> list = new LinkedList<String>(); 

EDIT(根据您的评论):

它看起来像你想航班列表,每个航班都有一个乘客名单列表。

public class Flight implements Comparable<Flight> { 
    private List<String> mPassengers; 
    private final int mFlight; 
    private static final Collator sCollator = Collator.getInstance(); 
    public Flight(int flight) { 
     mPassengers = new ArrayList<String>(); 
     mFlight = flight; 
    } 
    public void sortPassengers() { 
     Collections.sort(mPassengers, sCollator); 
    } 
    public void addPassenger(String name) { 
     mPassengers.add(name); 
    } 
    public boolean removePassenger(String name) { 
     return mPassengers.remove(name); 
    } 
    public boolean hasPassenger(String name) { 
     return mPassengers.contains(name); 
    } 
    public String getFlight() { return mFlight; } 
    public int compareTo(Flight other) { 
     return mFlight - other.mFlight; 
    } 
} 

public static List<Flight> list = new LinkedList<Flight>(); 
public static void main(String[] args) { 
    Flight flight = new Flight(501); 
    flight.addPassenger("Allen"); 
    // etc. for all flight 501 passengers 
    list.add(flight); 

    // repeat all the above for each flight number 
} 

您应该可以填写剩下的内容。

+0

以及我希望节点包含一个字符串和一个int。 list.addAirplane( “艾伦”,501); – allencoded 2011-06-06 00:57:36

+0

如果你这样做了,那么你需要创建一个冗余的数据结构来对航班进行索引,或者做更多的工作来通过航班列出乘客。 – 2011-06-15 02:57:58