- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今年早些时候,我在大学接到了一份作业。任务是使用 OOP 程序创建一个 parking 场管理系统。例如,我们学习了如何使用继承、抽象类和实例。我已经完成并通过了这项作业,所以这个问题只是出于知识目的。其中一项任务是按时间顺序对 ArrayList 中的对象进行排序。为此,我们学会了可比较/比较器的方法。然而,我无法理解它,也无法做到。问题是,我们必须订购一个“DateTime”对象,该对象位于数组列表中的“Vehicle”对象中。我没有使用预定义的日期和时间库,因为它需要用户输入。谢谢。
所以首先是抽象 Vehicle 类。
public abstract class Vehicle{
protected String vehicleID, brand;
protected DateTime datetime;
}
然后我将包含继承的车辆类之一。
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;
}
}
接下来是 dateTime 类,它不使用预定义库,而是输入到控制台中。
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;
}
}
正如你所看到的,我尝试使用比较器和比较器。
接下来是实例和主类
public interface CarParkManager {
public abstract void addVehicle(Vehicle vehicle);
public abstract void printVehicleList();
public abstract void deleteVehicle();
public abstract boolean runMenu();
}
主要:
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();
}
}
}
这是我尝试对数组列表进行排序的地方。我知道它不起作用,因为 Arraylist 是对象车辆的 Arraylist。我不明白如何使用可比较或比较器对对象进行排序。任何帮助都会被应用。
public void printVehicleList() {
for (int i = 0; i < vehicles.size(); i++) {
Collections.sort(vehicles, new DateTime());
}
}
最佳答案
您想要比较车辆。因此,您需要一个 VehicleComparator,而不是 DateTime 比较器:
public class VehicleComparator implements Comparator<Vehicle> {
@Override
public int compare(Vehicle o1, Vehicle o2) {
// now get the two vehicle's dates and compare them
}
}
然后
Collections.sort(vehicles, new VehicleComparator());
更新:
此外,您不需要 Comparator
和 Comparable
。
Comparator
是一个用于比较事物的独立类。您可以使用它来调用Collections.sort(vehicles, comparator)
。
或者您可以让事物本身实现Comparable
(例如Vehicle实现Comparable
)。然后他们可以有效地比较自己。如果某些东西实现了Comparable(这称为“自然排序”)。当这样做时,您可以调用Collections.sort(vehicles)
。该版本的排序方法期望列表中的所有内容都实现Comparable
,因此不需要独立的Comparator
来完成这项工作。
您不需要两者都做。
关于java - 比较另一个类JAVA中的日期和时间类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45278316/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!