我必须创建一个 CarFactory 类,它根据季节绘制一辆车(我认为我是对的),并从晚上 20 点到早上 6 点打开给定汽车的灯。 请忽略@Beans,它仅用于测试目的。我的问题是 hasHeadlightsTurnedOn() 的实现应该是什么样的?我对如何执行晚上 20 点到早上 6 点开灯的规则有点迷茫。
界面:
public interface Car {
boolean hasHeadlightsTurnedOn();
String getCarType();
}
然后是 3 种类型的汽车,以其中一种为例:
public class Sedan implements Car {
@Override
public String getCarType(){
return "Sedan";
}
@Override
public boolean hasHeadlightsTurnedOn() {
return true ;
}
}
类 CarFactory:
@Configuration
public class CarFactory {
@Bean
public Car randomCar(){
Car car;
String[] strArr= {"Spring", "Autumn", "Summer","Winter"};
Random generator = new Random();
int chosen = generator.nextInt(strArr.length);
if (chosen == 3) {
car = new SUV();
} else if (chosen == 2) {
car = new Cabrio();
} else {
car = new Sedan();
}
return car;
}
}
答案 0 :(得分:2)
这将是您的 hasHeadlightsTurnedOn 函数。
boolean hasHeadlightsTurnedOn(){
int hour = LocalTime.now().getHour();
return hour>=20 || hour<6;
}
对于季节部分,您可以使用月份和日期来确定它是哪个季节,而不是随机生成的数字。
答案 1 :(得分:2)
@Override
public boolean hasHeadlightsTurnedOn() {
LocalTime lt = LocalTime.now();
// long way
/*int hour = lt.getHour();
if (hour < 6 || hour >= 20) {
return true;
} else {
return false;
}*/
// short way
return lt.getHour() < 6 || lt.getHour() >= 20;
}
此外,我建议在接口中使用抽象类或默认方法。这样,您就不必为每个类创建相同的方法。
抽象类:
import java.time.LocalTime;
public abstract class AbstractCar implements Car {
@Override
public boolean hasHeadlightsTurnedOn() {
LocalTime lt = LocalTime.now();
return lt.getHour() < 6 || lt.getHour() >= 20;
}
}
然后是汽车类:
public class Sedan extends AbstractCar {
@Override
public String getCarType(){
return "Sedan";
}
}
或
默认方法:
import java.time.LocalTime;
public interface Car {
default boolean hasHeadlightsTurnedOn() {
LocalTime lt = LocalTime.now();
return lt.getHour() < 6 || lt.getHour() >= 20;
}
String getCarType();
}
和你的汽车类,只是没有 hasHeadlightsTurnedOn
函数
答案 2 :(得分:1)
为每种汽车类型定义一个私有的布尔变量。检查当前时间,如果它落在假设灯亮的时间范围内,则将其设置为 true。像这样的事情
日期 date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm") ;
dateFormat.format(date);
System.out.println(dateFormat.format(date));
if(dateFormat.parse(dateFormat.format(date)).after(dateFormat.parse("12:07")))
{
System.out.println("Current time is greater than 12.07");
}else{`enter code here`
System.out.println("Current time is less than 12.07");
}
答案 3 :(得分:0)
LocalDateTime
有一个 getHour()
方法,您可以像这样使用:
LocalDateTime time = LocalDateTime.now();
if (time.getHour() < 6 || time.getHour() >= 20) {
// headlights on
} else {
// headlights off
}