2016-11-02 4 views
-1

Я создал массив с именем idPlate в абстрактный класс автомобиля:Почему мой массив печатает нуль? (Java)

public abstract class Vehicle 
{ 
    String[] idPlate = new String[20]; 

    public abstract void setIDPlate(String plate, int num); 
    public abstract String getIDPlate(int num); 
} 

У меня есть еще один класс с именем автомобиль, который наследуется автомобиля:

public class Car extends Vehicle 
{ 
    public void setIDPlate(String plate, int num) 
    { 
     idPlate[num] = plate; 
    } 

    public String getIDPlate(int num) 
    { 
     return idPlate[num]; 
    } 
} 

Я хочу написать массив из класс CarParkManager от метода addVehicle и печати из массива с помощью метода listVehicles:

public class CarParkManager 
{ 
    String returnToMenu = "Y"; 
    String[] vehicle = new String[20]; 

    public void menu() 
    { 
     while ("Y".equals(returnToMenu)) { 
      System.out.println("*********Menu*********"); 
      System.out.println("Type appropriate number to select option:"); 
      System.out.println("1- Add new vehicle to Car Park"); 

      System.out.println("3- List Vehicles in Car Park"); 

      Scanner scan = new Scanner(System.in); 
      String listnumber = scan.nextLine(); 

      if ("1".equals(listnumber)) { 
       addVehicle(vehicle); 
      } 

      if ("3".equals(listnumber)) { 
       listVehicles(vehicle); 
      } 
     } 
    } 

    private void addVehicle(String v[]) 
    { 
     System.out.println("Enter car ID plate"); 
     Scanner input = new Scanner(System.in); 
     String vehicleid; 
     vehicleid = input.nextLine(); 

     for (int x = 0; x < v.length; x++) { 
      if (v[x] == null) { 
       v[x] = "Car"; 
       Car car = new Car(); 
       car.setIDPlate(vehicleid, x); 
       break; 
      } 
     } 
    } 

    public void listVehicles(String v[]) 
    { 
     System.out.println("****List Vehicle in Car Park****"); 

     for (int x = 0; x < 20; x++) { 
      if (v[x] == null) { 
       System.out.println("Parking lot " + x + ": Vacant"); 
      } 

      if (v[x] == "Car") { 
       Car getcarid = new Car(); 
       System.out.println("Parking lot " + x + ": " + v[x] + ", ID-" + getcarid.getIDPlate(x)); 
      } 
     } 
    } 
} 

Я могу распечатать фр ом массив транспортного средства, но idPlate остается пустой и поэтому выход, как: парковки 0: Автомобиль, ID-нуль

+1

Вы создаете новый 'Car' (' getcarid') непосредственно перед его печатью, поэтому поле idPlate для этого объекта никогда не инициализируется. – DNA

+0

Мне даже не нужно было создавать новый автомобиль. Благодаря! – Mark

ответ

0

Вы делаете

Car car = new Car(); // create a new Car 
car.setIDPlate(vehicleid, x); 
// don't do anything with it, throw it away 

и

Car getcarid = new Car(); // create a new uninitialised car. 
// try to print the uninitialised car. 
System.out.println("Parking lot " + x + ": " + v[x] + ", ID-" + getcarid.getIDPlate(x)); 

Я подозреваю вас предназначенный для создания объекта Car, который вы сначала задали одним способом и распечатали в другом. Я предлагаю передать объект Car, который будет использоваться для каждого метода.

0

Я считаю, что вы не вызываете метод setIDPlate перед вызовом getIDPlate. Более того, я обнаружил, что не существует части кода, инициализирующего idPlate, и, следовательно, все строки в idPlate имеют нулевой результат. Надеюсь, это поможет.

Смежные вопросы