2017-03-18 78 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

全部修好,非常感谢 –

相关问题