2015-04-06 123 views
0

我是初學java程序員,遇到問題。在java的另一個類中存儲類的實例

我已經用'// !!'標記了代碼的關鍵區域,我已經包含了程序的其餘部分以幫助解決問題。

我想存儲在類客戶端中的鏈接列表客戶端中存儲的人的一個實例到名爲乘客的鏈接列表中,在類汽車的一個實例中。不過,我經常遇到需要提供字符串和int的錯誤,這兩個值存儲在Person對象中。然而,我認爲,因爲我已經選擇了Person類,這會被轉移嗎?有誰知道我要去哪裏?總之,我試圖將鏈接列表(客戶端)中的對象(Person)的一個實例複製到另一個類(Car)中相同對象的另一個鏈接列表中,該列表本身就是一個實例3個車對象)

任何援助非常感謝。

這裏是Car類包含乘客鏈表

import java.io.*; 
import java.util.*; 

public class Car implements Serializable 
{ private int id; 
    private String pilot; 
    private int stops; 
    private LinkedList<Person> passengers = new LinkedList<Person>(); // !! `Here is the linked list passengers` 
    private double rate = 10.00; 
    public int scannableId = this.id; 
    // 
    public Car(int id, String pilot, int stops) 
    { this.id = id; 
     this.pilot = pilot; 
     this.stops = stops; } 

    public void go() 
    { System.out.println("CarManager" + id + " with " + pilot); 
     for (int stop = 0; stop < stops; stop++) 
     { charge(stop); 
      if (stopAt(stop)) 
      { showStop(stop); 
       pay(stop); }}} 



    private boolean stopAt(int i) 
    { for (Person person: passengers) 
      if (person.uses(i)) 
       return true; 
     return false; } 

    private void showStop(int i) 
    { String s = " Stop " + i + "\n"; 
     String on = on(i); 
     if (!on.isEmpty()) 
      s += " On: " + on + "\n"; 
     System.out.print(s); } 

    private String on(int i) 
    { String s = ""; 
     for (Person person: passengers) 
      if (person.getsOn(i)) 
       s += person.handle() + " "; 
     return s; } 

    public int getId() { 
     return this.id; 
    } 

    public int printId() { 
     System.out.print(this.id); 
     return this.id; 
    } 

    public int getStops() { 

     return this.stops; 

    } 

    public Person AddPassenger(Person newpassenger) { 

     newpassenger = passengers.add(new Person(newpassenger)); // !! This is where I try add a new passenger, however I'm getting an error stating that I need to provide a String and int, the parameters of the Person class. 

    } 

這裏是Person類

import java.io.*; 
import java.text.*; 

public class Person implements Serializable 
{ private String name; 
    private int id; 
    private double cash = 100.00; 
    private int start = 0; 
    private int end = 0; 
    private double charge = 0; 

    public Person(String name, int id) 
    { this.name = name; 
     this.id = id + 100; } 

    public boolean uses(int stop) 
    { return getsOn(stop) || getsOff(stop); } 

    public boolean getsOn(int stop) 
    { return start == stop; } 

    public int giveStops() { 

    System.out.println(this.start); 
    System.out.println(this.end); 
    return start; 
    } 

    public void setStart (int start) { 

    this.start = start; 

    } 

    public void setOff (int stop) { 

    this.end = stop; 

    } 

    public Person getPerson() { 
     Person person = this.Person; 
     return person; 

    } 

    public boolean getsOff(int stop) 
    { return end == stop; } 

    public String handle() 
    { return name + id; } 

    public double readCash() { 

     return this.cash; 

    } 

    public int getId() { 

     return this.id; 

    } 

    public String getName() { 

     return this.name; 

    } 

    @Override 
    public String toString() { 
     String result = " " + this.name + " (Scuba" + this.id + ") has " + formatted(this.cash); 
     return result; 
    } 

    private String formatted(double amount) 
    { DecimalFormat twoD = new DecimalFormat("$###,##0.00"); 
     return twoD.format(amount); } 

    public boolean matches(String name) 
    { return this.name.equals(name) || name.equals(this.name + this.id); } 

} 

這裏是carManager類,它包含汽車對象的鏈接列表。

import java.io.*; 
import java.util.*; 

public class CarManager implements Serializable 
{ private LinkedList<Car> cars = new LinkedList<Car>(); 
    private Clients clients = new Clients(); 


    public CarManager(){ 
     setup(); 
     menu(); 

    } 
// !! Here is where the cars are created 
    public void setup() 
    { cars.add(new Car(1, "Ed", 2)); 
     cars.add(new Car(2, "Fred", 7)); 
     cars.add(new Car(3, "Freda", 5)); } 


    public void menu() { 
     char choice; 
     while ((choice = readChoice()) !='x') { 
      switch(choice) { 
       case 'a': clients.makePerson(); break; 
       case 's': clients.showClients(); break; 
       case 'r':clients.removeClient(); break; 
       case 'b': findCar(); break; 
       case 'c': clients.getClient(); break; 

       default: showMenu(); 
      } 

     } 
    } 

    private int nextInt() { 

     return In.nextInt(); 

    } 

    public void findCar() { 
     System.out.print("Car: "); 
     int searchid = In.nextInt(); 
     boolean carfound = false; 
     for (Car i: cars) 
     { 
      if (searchid == i.getId()) 
      { 
       carfound = true; 
       System.out.println(" Stops 0-" + i.getStops()); 

       getClientId(); 

       Car thecar = i; 
       } 

      if (carfound == false) 
       System.out.println(" No such car"); 
     } 
    } 



    public void getClientId() { 

     clients.theSiv(); 

    } 


    private void showMenu() { 
     System.out.println("The menu choices are "); 
     System.out.println(" a: add a client"); 
     System.out.println(" r: remove a client "); 
     System.out.println(" b: make a booking"); 
     System.out.println(" g: go (run the s)"); 
     System.out.println(" s: show the clients"); 
     System.out.println(" f: store and exit"); 
     System.out.println(" x: exit"); 
    } 

    private char readChoice() { 
     System.out.print("Your choice: "); 
     return In.nextChar(); 
    } 

    public void exit() { 

     System.exit(0); 

    } 



} 

這裏是客戶端類,這包含了包含了我想要添加到汽車

import java.io.*; 
import java.util.*; 

public class Clients implements Serializable 
{ private LinkedList<Person> clients = new LinkedList<Person>(); 
    private int id = 1; 

    public Clients() 
    { clients.add(new Person("Homer", id++)); 
     clients.add(new Person("Marge", id++)); 

    } 

    public void makePerson(){ 

     clients.add(createPerson()); 

    } 

    public void removeClient() { 

     String searchname = readName(); 
     boolean removed = false; 

     for (Person i:clients) 
      if (i.matches(searchname)){ 
       clients.remove(i); 
       removed = true; 
     } 

     if (removed == false) 
      System.out.println(" No such client"); 

    } 

    public void theSiv() { 
     System.out.println(" CarManager id: "); 
     String s = In.nextLine(); 
     boolean isValidInteger = false; 
     char choice = 'p'; 
     int foundid = 0; 
     boolean exists = false; 
     int searchid = 0; 
     try 
     { 
      int i = Integer.parseInt(s); 
      isValidInteger = true; 
      // if (isValidInteger = true) 
       searchid = i; 
     } 
     catch (NumberFormatException ex) 
     { 
      choice = s.charAt(0); 
     } 

     if (choice != 'x') { 
      for (Person b:clients) 
       if (b.getId() == searchid){ 
        exists = true; 
        giveStops(b); 

       } 

       if(exists == false) { 

       System.out.println(" No such client"); 
       resartTheSiv(); 
      } 
     } 

    } 

    public void resartTheSiv(){ 
    theSiv(); 
    } 

    public int giveStops(Person i) { 

     String input; 
     System.out.println(" Trip: "); 
     input = In.nextLine(); 
     String[] split = input.split(" +"); 
     int start = Integer.parseInt(split[0]); 
     int stop = Integer.parseInt(split[1]); 
     i.setStart(start); 
     i.setOff(stop); 

     i.addPassenger(i); `// !! Here is where I try to add the selected instance of Person to car by first calling a method in Person to send itself to the passenger linked list.` 
     resartTheSiv(); 
     return start; 
    } 

    public void getClient() { 
     System.out.print(" CarManager id: "); 
     char choice; 
     int searchid = In.nextInt(); 

     boolean exists = false; 

     while ((choice = In.nextChar()) !='x'){ 
      for (Person i:clients) 
       if (i.getId() == searchid){ 
        exists = true; 
        System.out.println("found client"); 
      } 

      if (exists == false) 
       System.out.println(" No such client"); 

     } 

    } 

    public Person createPerson() 
    { 
     String name = readName(); 

     Person p = new Person(name, id++); 
     System.out.println(" Hi " + p.getName() + ", " + "you are CarManager" + p.getId()); 
     return p; 

    } 

    private String readName() { 
     System.out.print(" Name: "); 
     return In.nextLine(); 
    } 

    public void showClients() { 

     for (Person i: clients) 
      System.out.println(i); 

    } 

} 

的實例人的情況下,鏈表客戶這裏是根類,有是程序從

import java.io.*; 

public class Root 
{ public Root() { 

     new CarManager(); 

    } 

    public static void main(String[] args) 
    { new Root(); } 

    private CarManager carManager; 
} 

跑這裏是哪裏輸入進行處理,如果還有助於

import java.util.*; 

public class In 
{ private static Scanner in = new Scanner(System.in); 

    public static String nextLine() 
    { return in.nextLine(); } 

    public static char nextChar() 
    { return in.nextLine().charAt(0); } 

    public static int nextInt() 
    { int i = in.nextInt(); 
     in.nextLine(); 
     return i; } 

    public static double nextDouble() 
    { double d = in.nextDouble(); 
     in.nextLine(); 
     return d; } 
} 

回答

1

給乘客打電話.add怎麼樣?無需以任何方式構建新的Person對象或設置乘客的價值。

public void AddPassenger(Person newpassenger) { 
    passengers.add(newpassenger); 
} 

而且小記 - 通常方法名是駱駝,所以最好能夠調用addPassenger代替AddPassenger

+0

請原諒這個問題,如果它是愚蠢的,我只是希望能更多地發展我的知識。該方法編譯,如果我使它無效,但在你的情況下,你已經使該方法返回一個人,但我只是添加到鏈接列表,所以我很好奇它會返回什麼,如果它是必要的這樣做? – Mark

+0

啊,這是錯誤的。它應該是無效的 – Mshnik

0

的方法是這樣的應用程序編程?

如果是這樣,你完全錯誤,因爲你需要使用一條船不是汽車!

相關問題