Compare date and; Time class in another JAVA class

综合编程 Hello, buddy! (源链)

so earlier this year I was given an assignment at university. The assignment was to create a Car park management system by using OOP procedures. For example, we learnt how to use inheritance, abstract classes and instances. I have already completed and passed this assignment so this question is just for knowledge purposes. One of the tasks was to order the ArrayList of objects in chronological order. To do this, we was taught the comparable/comparator way. However, I could not get my head around it and was unable to do it. The problem was, we had to order a ‘DateTime’ object which was in a ‘Vehicle’ object in the arraylist. I am not using a predefined libary for the date and time as it needed to be user entered. Thanks.

So first of all here is the abstract Vehicle class.

public abstract class Vehicle{

protected String vehicleID, brand;
protected DateTime datetime;
 }

Then i’ll include one of the inherited vehicle classes.

public class Car extends Vehicle {

protected String colour;
protected int numOfDoors;

public Car(String brand, String vehicleID, int numOfDoors, String colour) {
    this.vehicleID = vehicleID;
    this.brand = brand;
    this.numOfDoors = numOfDoors;
    this.colour = colour;
}

public void setColour(String colour) {
    this.colour = colour;
}

public void setvehicleID(String vehicleID) {
    this.vehicleID = vehicleID;
}

public void setBrand(String brand) {
    this.brand = brand;
}

public String getColour() {
    return this.colour;
}

public String getVehicleID() {
    return this.vehicleID;
}

public String getBrand() {
    return this.brand;
}

public String toString() {

    return "Car";

}

public int getNumOfDoors() {
    return numOfDoors;
}

public void setNumOfDoors(int numOfDoors) {
    this.numOfDoors = numOfDoors;
}

public DateTime getDatetime() {
    return datetime;
}

public void setDatetime(DateTime datetime) {
    this.datetime = datetime;
}

  }

Next up is the dateTime class that does not use a predefined library and is entered in to the console.

import java.util.Comparator;

public class DateTime implements Comparator {

protected int day, month, year, minutes, hours;

public DateTime() {

}

public DateTime(int minutes, int hours, int day, int month, int year) {
    this.minutes = minutes;
    this.hours = hours;
    this.day = day;
    this.month = month;
    this.year = year;

}

@Override
public String toString() {
    return day+"/"+month+"/"+year + " " + minutes+":"+hours;
}

public int getDay() {
    return day;
}

public void setDay(int day) {
    this.day = day;
}

public int getMonth() {
    return month;
}

public void setMonth(int month) {
    this.month = month;
}

public int getYear() {
    return year;
}

public void setYear(int year) {
    this.year = year;
}

public int getMinutes() {
    return minutes;
}

public void setMinutes(int minutes) {
    this.minutes = minutes;
}

public int getHours() {
    return hours;
}

public void setHours(int hours) {
    this.hours = hours;
}

@Override
public int compareTo(DateTime o) {
    int returnValue = 0;
    if (this.year > o.getYear())
    returnValue = 1;
    else
        returnValue = -1;
    return returnValue;

}

@Override
public int compare(DateTime o1, DateTime o2) {
 return o1.year - o2.year;
}

}

As you can see I have tried to use the comparable and comparator.

Next the instance and the main class

public interface CarParkManager {

public abstract void addVehicle(Vehicle vehicle);

public abstract void printVehicleList();

public abstract void deleteVehicle();

public abstract boolean runMenu();
}

Main:

import java.util.ArrayList;
 import java.util.Collections;

 import java.util.Scanner;

public class MyCarParkManager implements CarParkManager {

private ArrayList vehicles;
private int numSpaces, doors, day, month, year, minutes, hour;
private String brand, vehicleID, colour, engineSize, cargoVolume;
Scanner in = new Scanner(System.in);

public MyCarParkManager(int vehicleList) {
    vehicles = new ArrayList();
    this.numSpaces = vehicleList;

}

public void addVehicle(Vehicle vehicle) {
    if (vehicles.size() < numSpaces) {

        vehicles.add(vehicle);
        numSpaces--;
        System.out.println("Spaces left: " + numSpaces);
    } else {
        System.out.println("Not enough spaces.");
    }

}

@Override
public void deleteVehicle() {
    for (int i = 0; i < vehicles.size(); i++) {
        System.out.println(vehicles.get(i).vehicleID);
    }
    System.out.println("Please enter vehicle ID you wish to delete");
    String idDelete = in.next();
    for (int i = 0; i < vehicles.size(); i++) {
        if(vehicles.get(i).vehicleID.equals(idDelete)){
            System.out.println("The " + vehicles.get(i).toString() + " was
    deleted.");
            vehicles.remove(i);

        }
    }

   }

  @Override
   public void printVehicleList() {

    for (int i = 0; i < vehicles.size(); i++) {
                Collections.sort(vehicles, new DateTime());
    }

    }

   @Override
   public boolean runMenu() {
    boolean exit = false;
    System.out.println("Please enter desired function");
    System.out.println("Enter 1 to add a vehicle");
    System.out.println("Enter 2 to delete a parked vehicle");
    System.out.println("Enter 3 to display already parked vehicles");

    int choice = in.nextInt();
    switch (choice) {
        case 1:
            System.out.println("Enter 1 to add a car");
            System.out.println("Enter 2 to add a van");
            System.out.println("Enter 3 to add a bike");
            int choice2 = in.nextInt();
            switch (choice2) {
                case 1:
                    System.out.println("Please enter brand of car");
                    brand = in.next();
                    System.out.println("Please enter vehicleID");
                    vehicleID = in.next();
                    System.out.println("Please enter number of doors");
                    doors = in.nextInt();
                    System.out.println("Please enter colour of the car");
                    colour = in.next();
                    System.out.println("Please enter the minutes of parked
      vehicle");
                    minutes = in.nextInt();
                    System.out.println("Please enter hour of parked
      vehicle");
                    hour = in.nextInt();
                    System.out.println("Please enter day");
                    day = in.nextInt();
                    System.out.println("Please enter month");
                    month = in.nextInt();
                    System.out.println("Please enter year");
                    year = in.nextInt();
                    DateTime datetime = new DateTime(minutes, hour, day, month, year);
                    Car c = new Car(brand, vehicleID, doors, colour);
                    c.setDatetime(datetime);
                    addVehicle(c);
                    break;
                case 2:
                    System.out.println("Please enter brand of car");
                    brand = in.next();
                    System.out.println("Please enter vehicleID");
                    vehicleID = in.next();
                    System.out.println("Please enter cargoVolume");
                    cargoVolume = in.next();
                    System.out.println("Please enter the minutes of parked
     vehicle");
                    minutes = in.nextInt();
                    System.out.println("Please enter hour of parked
    vehicle");
                    hour = in.nextInt();
                    System.out.println("Please enter day");
                    day = in.nextInt();
                    System.out.println("Please enter month");
                    month = in.nextInt();
                    System.out.println("Please enter year");
                    year = in.nextInt();
                    DateTime vanDateTime = new DateTime(minutes, hour, day, month, year);
                    Van v = new Van(brand, vehicleID, cargoVolume);
                    v.setDatetime(vanDateTime);
                    addVehicle(v);
                    break;
                case 3:
                    System.out.println("Please enter brand of car");
                    brand = in.next();
                    System.out.println("Please enter vehicleID");
                    vehicleID = in.next();
                    System.out.println("Please enter engine size");
                    engineSize = in.next();
                    System.out.println("Please enter the minutes of parked vehicle");
                    minutes = in.nextInt();
                    System.out.println("Please enter hour of parked vehicle");
                    hour = in.nextInt();
                    System.out.println("Please enter day");
                    day = in.nextInt();
                    System.out.println("Please enter month");
                    month = in.nextInt();
                    System.out.println("Please enter year");
                    year = in.nextInt();
                    DateTime bikeDateTime = new DateTime(minutes, hour, day, month, year);
                    Bike b = new Bike(brand, vehicleID, engineSize);
                    b.setDatetime(bikeDateTime);
                    addVehicle(b);
                    break;

            }
            break;
        case 2:
            deleteVehicle();
            break;
        case 3:
            printVehicleList();
            break;

    }

    return exit;

}

public static void main(String[] args) {
    CarParkManager carPark = new MyCarParkManager(20);
    boolean exit = false;

    while (!exit) {
        exit = carPark.runMenu();
    }
}

}

Here is where I am trying to sort the arraylist. I understand that it’s not working because the Arraylist is an Arraylist of object vehicles. I don’t understand how I would sort the object using comparable or comparator. Any help would be appericated.

public void printVehicleList() {

        for (int i = 0; i < vehicles.size(); i++) {
                    Collections.sort(vehicles, new DateTime());
        }

        }

You want to compare Vehicles. So you’ll need a VehicleComparator, not a DateTime comparator:

public class VehicleComparator implements Comparator {
    @Override
    public int compare(Vehicle o1, Vehicle o2) {
        // now get the two vehicle's dates and compare them
    }
}

Then

Collections.sort(vehicles, new VehicleComparator());

Update:

Also, you don’t need a Comparator
AND a Comparable
.

A Comparator
is a standalone class to compare things. You use that to call Collections.sort(vehicles, comparator)
.

Alternatively
you can make things implement Comparable
themselves (e.g. Vehicle implements Comparable
). Then they can effectively compare themselves. If something implements Comparable
(this is known as “natural ordering”). When doing it this way, you can call Collections.sort(vehicles)
. That version of the sort method expects everything in the list to implement Comparable
, and so doesn’t need a standalone Comparator
to do that work for it.

You don’t need to do both.

您可能感兴趣的

Java杂记3—流程控制之条件 首先来介绍程序的流程控制。 所谓的流程控制,就是在我们前面的课程中我们已经学过了变量,数据类型,运算符,表达式,这些都是计算机编程的基本元素,但是我们程序的基本执行单元应该是语句,程序执行,执行的不是表达式,而是执行语句。就好像我们小时候先学认字儿,再学组词,但最终要学造句,因为写作文一定是一句...
编程语言简史:有人不喜欢花括号,于是他发明了 Python... 编者按:编程语言有上千种,但是流行的不过10来种,那些我们经常使用的编程语言都是谁在什么时候创造出来的呢?Casper Beyer为我们进行了 整理 。 1800年 Joseph Marie Jacquard教会了一台织布机读穿孔卡片,制造出了第一个高度多线程的处理单元。他...
序列化Serializable和Parcelabel使用与区别 1.序列化 1.1 序列化的定义 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。简单地说,“序列化”就是将运行时的对象状态转换...
从String类型字符串的比较到StringBuffer和StringBuilder... 1. String类型 String类源码 为了从本质上理解String类型的特性所在,我们从String类型的源码看起,在源码中String类的注释中存在以下: /**Strings are constant; their values ...
java.lang.RuntimeException: Unable to get provider... Android Studio 3.1.2 报错: java.lang.RuntimeException: Unable to get provider cn.jpush.android.service.DataProvider: java.lang.ClassNotFoundExcepti...
Hello, buddy!责编内容来自:Hello, buddy! (源链) | 更多关于

阅读提示:酷辣虫无法对本内容的真实性提供任何保证,请自行验证并承担相关的风险与后果!
本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » Compare date and&semi; Time class in another JAVA class



专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录