donc plus tôt cette année, j'ai reçu une affectation à l'université. La mission consistait à créer un système de gestion de parking en utilisant les procédures OOP. Par exemple, nous avons appris à utiliser l'héritage, les classes abstraites et les instances. J'ai déjà terminé et passé cette affectation afin que cette question soit juste à des fins de connaissance. L'une des tâches consistait à commander l'ArrayList d'objets dans l'ordre chronologique. Pour ce faire, nous avons appris la manière comparable/comparative. Cependant, je ne pouvais pas comprendre ce qui se passait et j'étais incapable de le faire. Le problème était, nous avons dû commander un objet 'DateTime' qui était dans un objet 'Vehicle' dans l'arraylist. Je n'utilise pas de librairie prédéfinie pour la date et l'heure car elle devait être saisie par l'utilisateur. Merci.En comparant la classe Date & Time dans une autre classe JAVA
Alors tout d'abord voici la classe abstraite Vehicle.
public abstract class Vehicle{
protected String vehicleID, brand;
protected DateTime datetime;
}
Ensuite, je vais inclure l'une des classes de véhicules héritées.
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;
}
}
Ensuite est la classe DateTime qui n'utilise pas une bibliothèque prédéfinie et est entré à la console.
import java.util.Comparator;
public class DateTime implements Comparator<DateTime> {
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;
}
}
Comme vous pouvez le voir, j'ai essayé d'utiliser le comparateur et le comparateur.
Suivant l'instance et la classe principale
public interface CarParkManager {
public abstract void addVehicle(Vehicle vehicle);
public abstract void printVehicleList();
public abstract void deleteVehicle();
public abstract boolean runMenu();
}
principal:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class MyCarParkManager implements CarParkManager {
private ArrayList<Vehicle> 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<Vehicle>();
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();
}
}
}
Ici, je suis en train de trier le arraylist. Je comprends que cela ne fonctionne pas parce que l'Arraylist est un Arraylist de véhicules d'objet. Je ne comprends pas comment je trierais l'objet en utilisant un comparateur ou un comparateur. Toute aide serait appérialisée.
public void printVehicleList() {
for (int i = 0; i < vehicles.size(); i++) {
Collections.sort(vehicles, new DateTime());
}
}
Référer https://stackoverflow.com/help/how-to-ask ..Publier uniquement le code requis – Akshay