2017-03-18 34 views
-4

夥計們,我正在做java編程並嘗試創建列表,但我無法讓它按照我的預期工作,請幫助我找出哪裏出錯。 我已經在BlueJ上創建了代碼並嘗試在不同部分創建main和method,但是當我嘗試在列表中添加一個變量時,它似乎添加了但不會正確顯示,並且remove方法將調用錯誤並關閉整個程序 一個是:可能有人幫我檢查如何創建一個列表?

import java.util.ArrayList; 

public class Plane 
{ 
    //Create 3 types of variables. 
    private String name; 
    private int safelength; 
    private short station; 
    private String passengername; 
    private static int seat; 
    private static int age; 
    private ArrayList<Passenger> Passengers; 

    public Plane(String psgname, int psgseat, int psgage) 
    { 
     psgname = passengername; 
     psgseat = seat; 
     psgage = age; 
     Passengers = new ArrayList<Passenger>(); 
    } 

    public Plane(String planename, int maxlength, short astation) 
    { 
     name = planename; 
     safelength = maxlength; 
     station = astation; 
    } 

    public void addPassenger(Passenger Passenger) 
    { 
     Passengers.add(Passenger); 
    } 

    public void addPassenger(String passengernames, int pseat, int page) 
    { 
     Passengers.add(new Passenger(passengername, seat, page)); 
    } 

    public Passenger findPassenger(String find) 
    { 
     for(Passenger ps : Passengers) 
     { 
      if(ps.getpname().contains(find)) 
      { 
       return ps; 
      } 
     } 
     return null; 
    } 

    public int numberofPassenger() 
    { 
     return Passengers.size(); 
    } 

    public void removePassenger(int number) 
    { 
     if (number >= 0 && number <numberofPassenger()) 
     { 
      Passengers.remove(number); 
     } 
    } 

    public void listPassenger() 
    { 
     for(int index = 0; index < Passengers.size(); index++) 
     { 
      System.out.println(Passengers.get(index)); 
     } 
    } 



    public void setname(String n) 
    { 
     name = n; 
    } 

    public String getname() 
    { 
     return name; 
    } 

    public void setsafelength(int s) 
    { 
     safelength = s; 
    } 

    public int getsafelength() 
    { 
     return safelength; 
    } 

    public void setstation(short a) 
    { 
     station = a; 
    } 

    public short getstation() 
    { 
     return station; 
    } 

    public String toString() 
    { 
     String text = "System checked, " + getname() + ", you can prepare yourself at station " + getstation() + " with the maxlength of " + getsafelength() + " metres."; 
     return text; 
    }  
} 

另一個是:

import java.util.ArrayList; 
import java.util.Scanner; 

public class Passenger 
{ 
    // private varibales of the list. 
    private static String pname; 
    private static int seat; 
    private static int age; 

    public Passenger(String passengername, int pseat, int page) 
    { 
     // initialise instance variables 
     pname = passengername; 
     seat = pseat; 
     age = page; 
    } 

    public static void main(String[] args) 
    { 
     Plane p = new Plane("Joey", 45, 26); 


     String text = "Please select your option:\n" + "1.Add a passenger.\n" + "2.Find a passenger.\n" + "3.Total number of passengers.\n" + "4.Remove a passenger.\n" + "5.Print all passengers\n";; 
     System.out.println(text); 

     Scanner input = new Scanner(System.in); 
     int choice = input.nextInt();//waiting type the choice 

     if(choice > 5 || choice < 0) 
     {//if choice is wrong 
      System.out.println("Please select a vailable option!"); 
     } 

     while(choice <=5 && choice >= 0) 
     { 
      if(choice == 1) 
      { 
      Scanner inputname = new Scanner(System.in); 
      System.out.println("Please enter the name of passenger"); 
      String x = inputname.nextLine(); 
      Scanner inputseat = new Scanner(System.in); 
      System.out.println("Please enter the number of seat."); 
      int y = inputseat.nextInt(); 
      Scanner inputage = new Scanner(System.in); 
      System.out.println("Please enter the age of passenger."); 
      int z = inputage.nextInt(); 
      Passenger padd = new Passenger(pname, seat, age); 
      p.addPassenger(padd); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 2) 
     {System.out.println("Please enter the name you want to find."); 
      String a = input.nextLine(); 
      p.findPassenger(a); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 3) 
     { 
      p.numberofPassenger(); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 4) 
     {System.out.println("Please enter the number of list which one you want to remove."); 
      int b = input.nextInt(); 
      p.removePassenger(b); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 5) 
     {System.out.println("Here are all the variables of the list."); 
      p.listPassenger(); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
    } 
} 

    public static void setpname(String pn) 
    { 
     pname = pn; 
    } 

    public static String getpname() 
    { 
     return pname; 
    } 
} 
+0

歡迎的StackOverflow!請閱讀[這裏](https://stackoverflow.com/help/how-to-ask)如何提出一個好問題。代碼**牆的問題通常不受關注。儘量把問題縮小到非常具體的點 –

+0

對不起,但你的問題有點不清楚。你期望什麼,你實際得到了什麼(錯誤,例外,不正確的結果)?此外,爲什麼'Passenger'類的私人領域'static'?你知道靜態是什麼意思嗎? – Pshemo

+0

歡迎來到SO。 TL; DR。這是最短的代碼來證明問題嗎?請發佈一個[MCVE] – c0der

回答

0

問題1.

public void listPassenger() 
    { 
     for(int index = 0; index < Passengers.size(); index++) 
     { 
      System.out.println(Passengers.get(index)); 
     } 
    } 

這裏您打印實例變量,而不是乘客的name.To打印出來的價值,也

System.out.println(Passengers.get(index).getpname()); 

但這將返回null,因爲你pname是靜態的,你從來沒有初始化的其value.For這,將所有yor靜態varibales更改爲非靜態。

問題2:

Passenger padd = new Passenger(pname, seat, age); 

你分別儲存乘客在nameseatagexyz變量,butduring的Passenger創建,使用的是pnameseatage變量,這裏有null.So做

Passenger padd = new Passenger(x, y, z); 

最後,將每個靜態變量和方法改爲非靜態。

最終解決方案將這個樣子,

import java.util.ArrayList; 
import java.util.Scanner; 

public class Passenger 
{ 
    // private varibales of the list. 
    private String pname; 
    private int seat; 
    private int age; 

    public Passenger(String passengername, int pseat, int page) 
    { 
     // initialise instance variables 
     pname = passengername; 
     seat = pseat; 
     age = page; 
    } 

    public static void main(String[] args) 
    { 
     Plane p = new Plane("Joey", 45, 26); 


     String text = "Please select your option:\n" + "1.Add a passenger.\n" + "2.Find a passenger.\n" + "3.Total number of passengers.\n" + "4.Remove a passenger.\n" + "5.Print all passengers\n";; 
     System.out.println(text); 

     Scanner input = new Scanner(System.in); 
     int choice = input.nextInt();//waiting type the choice 

     if(choice > 5 || choice < 0) 
     {//if choice is wrong 
      System.out.println("Please select a vailable option!"); 
     } 

     while(choice <=5 && choice >= 0) 
     { 
      if(choice == 1) 
      { 
      Scanner inputname = new Scanner(System.in); 
      System.out.println("Please enter the name of passenger"); 
      String x = inputname.nextLine(); 
      Scanner inputseat = new Scanner(System.in); 
      System.out.println("Please enter the number of seat."); 
      int y = inputseat.nextInt(); 
      Scanner inputage = new Scanner(System.in); 
      System.out.println("Please enter the age of passenger."); 
      int z = inputage.nextInt(); 
      Passenger padd = new Passenger(x, y, z); 
      p.addPassenger(padd); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 2) 
     {System.out.println("Please enter the name you want to find."); 
      String a = input.nextLine(); 
      p.findPassenger(a); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 3) 
     { 
      p.numberofPassenger(); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 4) 
     {System.out.println("Please enter the number of list which one you want to remove."); 
      int b = input.nextInt(); 
      p.removePassenger(b); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
     if (choice == 5) 
     {System.out.println("Here are all the variables of the list."); 
      p.listPassenger(); 
      System.out.println(text); 
      choice = input.nextInt(); 
     } 
    } 
} 

    public void setpname(String pn) 
    { 
     pname = pn; 
    } 

    public String getpname() 
    { 
     return pname; 
    } 
} 
+0

非常感謝,我修復了代碼,它現在可以提供名稱,如果我想提供所有的值,我應該再製作兩個get方法嗎?和我的.sizi()方法似乎也不工作。 –

+0

通過「呈現所有其他價值觀」,我相信你的意思是座位和年齡,那麼是的。你的'numberofPassenger()'工作正常。你錯過了這個方法返回'Passengers'列表的大小()的事實,所以你需要捕獲像'System.out.println(p.numberofPassenger())的值」。同時,當我意識到你正在使用像Plane類'addPassenger(Passenger Passenger)'這樣令人困惑的變量名''時,varibale和類名都是相同的。請避免這樣的事情,並選擇不同的含義名稱。 –

+0

全部修好,非常感謝 –

相關問題