toString an arraylist containing object

混江龙づ霸主 提交于 2019-12-25 07:12:48

问题


I have an array list of type car. I have an overriding toString method which prints my car in the desired format. I'm using the arraylist.get(index) method to print the cars. I only have one for now it works, but I want it do print for all of the cars in the array list.

This is my code:

public class Garage {

    private static int carsCapacity = 30;
    ArrayList<Cars> myGarage;
    public Garage() {
        Scanner scanAmountOfCars = new Scanner(System.in);
        System.out.println("Please limit the number of car the garage can contain.");
        System.out.println("If greater than 50, limit will be 30.");
        int validAmount = scanAmountOfCars.nextInt();
        if (validAmount <= 50) {
            carsCapacity = validAmount;
            myGarage = new ArrayList<Cars>();
        }
        System.out.println(carsCapacity);
    }

    public void addCar() {
        Cars car = new Cars(Cars.getID(), Cars.askCarID(), Cars.getPosition(), Attendant.askForAtt(), System.currentTimeMillis());
        myGarage.add(car);
        //System.out.println(car);
    }


    public static int getCarsCapacity() {
        return carsCapacity;
    }

    @Override
    public String toString() {
        return "Garage [Car:" + myGarage.get(0).getPlateNum() + " ID:" + myGarage.get(0).getCarID() +  " Position:" + Cars.getPosition() + 
                " Assigned to:" + Cars.getAssignedTo().getId() + "(" + Cars.getAssignedTo().getName()
                + ")" + " Parked at:" + Cars.convert(myGarage.get(0).getCurrTime()) + "]";
    }
}

I also put the Cars class in case you need it:

public class Cars {

    private String carID;
    private String plateNum;
    private static String position;
    private static Attendant assignedTo;
    private long currTime;
    static String[] tempArray2 = new String[Garage.getCarsCapacity()];


    public Cars(String carID, String plateNum, String position, Attendant assignedTo, long currTime) {
        this.carID = carID;
        this.plateNum = plateNum;
        Cars.position = position;
        Cars.assignedTo = assignedTo;
        this.currTime = currTime;
    }

    private static void createCarsID() {

        for (int x = 0; x < Garage.getCarsCapacity(); x++) {
            tempArray2[x] = ("CR" + (x + 1));
        }
    }

    public static String getID() {

        createCarsID();
        String tempID = null;
        String tempPos = null;
        for (int x = 0; x < tempArray2.length; x++) {
            if (tempArray2[x] != null) {
                tempID = tempArray2[x];
                tempPos = tempArray2[x];
                getPos(tempPos);
                tempArray2[x] = null;
                break;
            }
        }

        return tempID;
    }

    public static void getPos(String IdToPos) {
        String strPos = IdToPos.substring(2);
        int pos = Integer.parseInt(strPos);
        position = "GR" + pos;

    }

    public String getPlateNum() {
        return plateNum;
    }


    public String getCarID() {
        return carID;
    }

    public static String getPosition() {
        return position;
    }

    public long getCurrTime() {
        return currTime;
    }


    public static Attendant getAssignedTo() {
        return assignedTo;
    }

    public static String askCarID() {
        boolean valid = false;
        System.out.println("Please enter your car's plate number.");
        Scanner scanCarID = new Scanner(System.in);
        String scannedCarID = scanCarID.nextLine();
        while (!valid) {
            if (scannedCarID.matches("^[A-Za-z][A-Za-z] [0-9][0-9][0-9]$")) {
                valid = true;
                System.out.println(scannedCarID);
            } else {
                System.out.println("Please enter a valid plate number. Ex: AF 378");
                askCarID();
            }
        }
        return scannedCarID.toUpperCase();
    }

    public static String convert(long miliSeconds) {
        int hrs = (int) TimeUnit.MILLISECONDS.toHours(miliSeconds) % 24;
        int min = (int) TimeUnit.MILLISECONDS.toMinutes(miliSeconds) % 60;
        int sec = (int) TimeUnit.MILLISECONDS.toSeconds(miliSeconds) % 60;
        return String.format("%02d:%02d:%02d", hrs, min, sec);
    }

}

回答1:


Your Garage should have the implementation of toString() which uses ArrayList#toString() implementation:

public String toString() {
    return "Garage: " + myGarage.toString();
}

Also remember to implement toString() in Cars.java.

public String toString() {
    return "[" + this.carID + " " + 
    this.plateNum + " " +
    Cars.position + " " +
    Cars.assignedTo.toString + " " +
    String.valueOf(this.currTime) + "]"
}


来源:https://stackoverflow.com/questions/39596460/tostring-an-arraylist-containing-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!