簡體   English   中英

我在從父 ArrayList 返回對象時遇到問題

[英]I have problems returning an object from parent ArrayList

我有 4 個課程(為方便起見,我將縮短它們)。

public class PoliceStation{
public String name;
 ArrayList<Owner> owners = new ArrayList<>();

public boolean addOwner(Owner owner) {
        if(findOwnerID(owner)) {
            this.owners.add(owner);
            System.out.println("Owner "+owner.getName()+" added.");
            return true;
        }
        System.out.println("Owner "+owner.getName()+" with "+owner.getOwnerIDNumber()+" not added.");
        return false;
    }

還有一些用於查找所有者對象的類。

Owner類:

import java.util.ArrayList;
public class Owner {
    String name;
    String dateOfBirth;
    long ownerIDNumber;
    String address;
    ArrayList<Vehicle> vehicles=new ArrayList<Vehicle>();
    ArrayList<Fine> penalties = new ArrayList<Fine>();
public Vehicle findVehicleObject(String plateNum) {
    for(int i=0;i<vehicles.size();i++) {
        System.out.println(i);
        if(vehicles.get(i).getPlateNumber().equalsIgnoreCase(plateNum)) {
            System.out.println("Vehicle with that plate number "+plateNum+" exists.");
            return vehicles.get(i);
        }
    }
    System.out.println("Vehicle doesnt exist with "+plateNum);
    return null;
}

其中包括 addVehicle 方法、findVehicle 等。

車輛類別:

public class Vehicle extends Owner{
    PoliceStation ps = new PoliceStation("center");

    String plateNumber;
    String name;
    String type;
    //String serialNum;

    public Vehicle(String driverName, String dateOfBirth,long ownerID, String address,String plateNumber, String name, String type) {
        super(driverName,dateOfBirth,ownerID,address);
        this.plateNumber = plateNumber;
        this.name = name;
        this.type = type;
    }

使用 findVehicle 方法應該返回帶有車輛車牌號的車輛對象:

public Vehicle findVehicle1(String plateNum) {
    if(this.plateNumber==plateNum) {
        System.out.println("Lookin "+plateNum);
        return super.findVehicleObject(plateNum);
    }else return null;
}

在那之后,我有一個名為RadioCam的第四個類, plateNumber從汽車中讀取一個plateNumber :(注意:下面的代碼寫得很糟糕,因為我一直試圖plateNumber工作但沒有成功)

class RadioCam{
public void detection(double speed) {
    System.out.println("Vehicle detected.");
    //speed would be a variable that the radioCam would return using radiowaves and doppler effect
    if(speed>50) {
        String plateNumber = takePicture();
        Vehicle veh = new Vehicle(plateNumber);
        veh = veh.findVehicle1(plateNumber);//<-- null
        System.out.println("-------------------"+veh.getName());//<- null here as well
        Owner ownerFine = ps.getOwner(veh);
        ownerFine= ps.getOwner(veh);
        System.out.println("sssssss"+ownerFine.getName());
        //ownerFine = PoliceStation.getOwner(veh);
        ps.addFine(ownerFine, "speed violation", veh);//<- so this method doesnt work in the end becuse ownerFine and veh are null

將 null 返回給veh = veh.findVehicle1(plateNumber); . 回到public Vehicle findVehicleObject(String plateNum) { for(int i=0;i<vehicles.size();i++) { <-- vehicle.size() 為 0 所以它不會通過車輛。 我知道我需要一個來自數組列表的所有者對象才能從數組列表中獲取車輛對象,但在這種情況下,我需要一個來自車牌號(它是車輛類的一部分)和車輛對象的車輛對象來獲取擁有車輛對象的所有者對象。

我希望我能很好地解釋我的問題。

嘗試使用 equals 方法來比較值,即使它們具有相同的值, this.plateNumber==plateNum也可能為 false。

public Vehicle findVehicle1(String plateNum) {
    if(this.plateNumber.equals(plateNum)) {
        System.out.println("Lookin "+plateNum);
        return super.findVehicleObject(plateNum);
    }else return null;
}

在您的findVehicle1(String plateNum)方法中,您使用==運算符比較兩個字符串,而您應該使用string.equals(Object other)

嘗試改變

 if(this.plateNumber==plateNum) {

 if(this.plateNumber.equals(plateNum)) {

此外,在構建您的車輛對象時,您省略了許多所需的參數

public Vehicle(String driverName, String dateOfBirth,long ownerID, String address,String plateNumber, String name, String type) {

^ 構造函數要求 7 個參數,而您只提供

new Vehicle(plateNumber);

一個參數。 因此,當然您的veh.getName()方法將返回 null,因為它是您在創建車輛對象時未維護的屬性。

解決這些問題后,您可以考慮您的通用代碼結構,例如在何處實現循環等。

我不知道您是否使用 IDE,但如果您使用,請熟悉調試功能,以便在調用的方法中逐步跟蹤代碼執行。 您可以輕松地確定以它們不應該采取的方式運行的代碼行(畢竟您已經找到了 null 是您的方法調用結果的行)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM