2017-02-22 12 views
1

Я хочу ввести новый набор узлов в связанном списке для каждого отдельного пассажира. Например:Как ввести новый набор узлов в связанном списке для каждого отдельного связанного списка

Для имени пассажира введите, скажем, John.

Для кода страны вхожу: BI

Для номера рейса вхожу: 095

Для количества багажа я могу ввести любую сумму.

Допустим, я вхожу: Джон, BI, 095, 3.

Это то, что я получаю: [John with baggage(s) [BI0950, BI0951, BI0952]] чего я хочу.

Затем я нажимаю 'b', чтобы ввести нового пассажира.

Затем я ввожу для следующего пассажира: Джейн, БУ, 096, 3.

Это то, что я получаю: [John with baggage(s) [BI0950, BI0951, BI0952], Jane with baggage(s) [BI0950, BI0951, BI0952, BU0960, BU0961, BU0962]]

Как удалить старые узлы (BI0950, BI0951, BI0952) из baggage Связанный список всякий раз, когда я нажимаю 'b' ('b' должен добавить нового пассажира)?

import java.util.*; 

public class baggage_system{ 

    static LinkedList<String> baggagex = new LinkedList<String>(); 

    public static String getUser_command(){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter command B-baggage, n-next, q-quit"); 
    String s = keyboard.nextLine(); 
    return s; 
    } 

    public static String getUser_flight(){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter the flight number"); 
    String s = keyboard.nextLine(); 
    return s; 
    } 

    public static String getPassenger(){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter passenger name"); 
    String s = keyboard.nextLine(); 
    return s; 
    } 

    public static String getUser_country(){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter the country code"); 
    String s = keyboard.nextLine(); 
    return s; 
    } 

    public static int getUser_number(){ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Please enter number of baggage"); 
    int s = keyboard.nextInt(); 
    return s; 
    } 


    public static String nextbg(ListIterator<String> iteratorbg){ 
    return iteratorbg.next();  
    } 

    public static LinkedList<String> makeBaggage(String country, String flight, int num){ 

    baggagex.add(country + flight + num); 

    return baggagex; 

    } 

    public static int count(){ 
    System.out.println(baggagex.size()); 
    return baggagex.size(); 

    } 

    public static void main(String args[]) { 

    LinkedList<Passenger> passenger = new LinkedList<Passenger>(); 
    LinkedList<String> baggage = new LinkedList<String>(); 
    ListIterator<String> iteratorbg = baggage.listIterator(); 

     LinkedList<String> counting = new LinkedList<String>(); 

    String command = ""; 

    while (!command.equals("q")){ 
     command = getUser_command(); 

    if(command.equals("B") || command.equals("b")){ 
     String p = ""; 
     p = getPassenger(); 
     passenger.add(new Passenger(p)); 


     String country = ""; 
     country = getUser_country(); 

     String flight = ""; 
     flight = getUser_flight(); 

     int amount = 0; 
     amount = getUser_number(); 

     String[] bg = new String[amount]; 



     for(int i = 0; i < amount; i++){ 
    //  LinkedList<String> bgg = new LinkedList<String>(); 

     baggage = makeBaggage(country, flight, i); 

     System.out.println(baggage); 

     } 
     LinkedList<String> bgg = new LinkedList<String>(baggage); 



     passenger.getLast().setBaggages(bgg); 


     System.out.println(passenger); 

/*  if(baggage.size() != 0 && baggage.size() > baggage.size() - 1){ 
     for(int j = 0; j < bgg.size(); j++){ 
      baggage.remove(j); 
     } 
     */ 
//  System.out.println(bgg); 



/*  while (!baggage.isEmpty()) { 
     baggage.removeFirst(); 
    } 
     */ 

    } else if(command.equals("n")){ 
     count(); 
    } else if (command.equals("p")){ 
     System.out.println(baggage.peekFirst()); 
    } 

    else 
     System.out.println("Enter 'q' to end the program"); 

    } 
    } 

public static class Passenger { 

    String passengers;  
    List<String> baggage; 

    public Passenger(String passengers) { 
     this.passengers = passengers; 
     baggage = null; 
    } 

    public void setBaggages(List<String> baggages) { 
     this.baggage = baggages; 
    } 

    public void pBags(){ 

    } 

    @Override 
    public String toString() {  

     return passengers + " with baggage(s) " + baggage; 

    } 
    } 
} 

ответ

1

Проблема с вашей логикой кодирования, вы используете один и тот же связанный багажный объект для всех пассажиров.

static LinkedList<String> baggagex = new LinkedList<String>(); 

Если вы добавите или удалите любой объект из этого LinkedList, это повлияет на всех пассажиров.

Используйте новый объект связанного списка для каждого пассажира. Как ниже кода:

public static LinkedList<String> makeBaggage(String country, String flight, int num) 
{ 
    LinkedList baggagex = new LinkedList(); 
    baggagex.add(country + flight + num); 

    return baggagex; 
} 
+0

Здравствуйте, я сделал это уже, но как-то он печатает только последний узел. Это то, что я получил бы [[John with baggage (s) [BI0952]] ' –

+0

Он будет продолжать заменять существующий узел, потому что каждый раз, когда метод называется' baggagex', будет опустошен –