2017-03-18 3 views
-4

남자, 자바 프로그램을 작성하고 목록을 만들려고 노력하지만, 예상대로 작동하지 않을 수 있습니다. 제발 어디서 잘못되었는지 알아내는 데 도움이됩니다. BlueJ에 코드를 만들고 다른 부분에서 main과 method를 만들려고했지만 목록에 변수를 추가하려고하면 추가 된 것처럼 보이지만 제대로 나타나지 않을 것이며 메서드를 제거하면 오류가 발생하고 전체 프로그램이 종료됩니다. 하나는 :누군가가 목록을 만드는 방법을 확인하는 데 도움을 줄 수 있습니까?

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

에 오신 것을 환영합니다 보일 것입니다! 좋은 질문을하는 방법은 [here] (https://stackoverflow.com/help/how-to-ask)를 참조하십시오. ** 코드 벽 **에 대한 질문은 일반적으로주의를 끌지 않습니다. 매우 구체적인 지점에 질문 범위를 좁히려 고하십시오. –

+0

죄송하지만 문제는 분명하지 않습니다. 기대했던 것과 실제로 얻은 것은 무엇입니까 (오류, 예외, 잘못된 결과)? 또한 'Passenger'클래스의 비공개 필드가 정적 인 이유는 무엇입니까? 정적이 무슨 뜻인지 아십니까? – 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)); 
     } 
    } 
,617,451 여기

당신이 value.For이 초기화 적이없는 당신은,

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

를 인스턴스 변수가 아닌 승객의 name.To 그것을 인쇄의 값을 인쇄하지만 pname 정적이며 있기 때문에 이것은, null를 돌려줍니다 모든 정적 varibales를 비 정적으로 변경하십시오.

문제 2.

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

하면, 여기 null.So이다 pnameseatage 변수를 사용 Passenger의 생성을 butduring 각각 승객 nameseatagexyz 변수를 저장하는 do

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

고맙습니다. 코드를 수정하면 이름을 제공 할 수 있습니다. 모든 값을 표시하려면 다른 두 메서드를 만들어야합니까? 내 .sizi() 메서드도 작동하지 않는 것 같습니다. –

+0

"현재 다른 모든 가치를 나타냅니다"나는 당신이 좌석과 나이를 의미한다고 믿는다. 그렇다면 그렇다. 귀하의 '승객 수 (numberofPassenger)'가 정상적으로 작동하고 있습니다. 승객 목록의 크기()를 반환한다는 사실을 놓쳤으므로 'System.out.println (p.numberofPassenger())'와 같은 값을 알아야합니다. '. 또한 그것을가는 동안, 나는 당신이 Plane 클래스 'addPassenger (Passenger Passenger)'와 같은 혼란스러운 변수의 이름을 많이 사용하고 있다는 것을 깨달았습니다. varibale과 클래스 이름은 동일합니다. 그런 것을 피하고 다른 의미 이름을 선택하십시오. –

+0

모두 고쳐 주셔서 감사합니다. –

관련 문제