Java枚举
这就是我想做的: 创建一个包含枚举的应用程序,该枚举表示一周中的天数。显示日期列表,然后提示用户输入日期。显示所选日期的营业时间。假设周日营业时间为11点至5点,平日营业时间为9点至9点,周六营业时间为9点至6点 这就是我所拥有的:Java枚举,java,enums,Java,Enums,这就是我想做的: 创建一个包含枚举的应用程序,该枚举表示一周中的天数。显示日期列表,然后提示用户输入日期。显示所选日期的营业时间。假设周日营业时间为11点至5点,平日营业时间为9点至9点,周六营业时间为9点至6点 这就是我所拥有的: import javax.swing.JOptionPane; public class DayOfWeek { Day day; public void Day(Day day) { this.day = day; } public void bu
import javax.swing.JOptionPane;
public class DayOfWeek {
Day day;
public void Day(Day day) {
this.day = day;
}
public void businessHours() {
switch (day) {
case SATURDAY: System.out.println("Open from 9 to 6.");
break;
case SUNDAY: System.out.println("Open from 11 to 5.");
break;
default: System.out.println("Open from 9 to 9.");
break;
}
}
public static void main(String[] args) {
String dayInput = JOptionPane.showInputDialog("Please input a day: ");
EnumDay sixthDay = new EnumDay(Day.SATURDAY);
sixthDay.businessHours();
EnumDay seventhDay = new EnumDay(Day.SUNDAY);
seventhDay.businessHours();
if (dayInput == "Saturday")
{
JOptionPane.showMessageDialog(null, sixthDay.businessHours());
System.exit(0);
}
else if (dayInput == "Sunday")
{
JOptionPane.showMessageDialog(null, seventhDay.businessHours());
System.exit(0);
}
else
{
JOptionPane.showMessageDialog(null, default.businessHours());
System.exit(0);
}
}
}
和枚举类:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
请帮助我如何进行比较和打印。谢谢。您可以这样保存数据:
Class WorkingDay{
Day day;
Time startTime;
Time endTime;
public WorkingDay(Day day, Time startTime, Time endTime){
this.day = day;
this.startTime = startTime;
this.endTime = endTime;
}
//getters/setters
...
}
class Time{
int hours;
int minutes;
public Time(int hours, int minutes){
...
}
public String toString(){
return hours + " : " + minutes;
}
//getters/setters
...
}
public enum Day {
SUNDAY("Sunday", "Open from 11 to 5."),
MONDAY("Monday", "Open from 9 to 9."),
TUESDAY("Tuesday", "Open from 9 to 9."),
WEDNESDAY("Wednesday", "Open from 9 to 9."),
THURSDAY("Thursday", "Open from 9 to 9."),
FRIDAY("Monday", "Open from 9 to 9."),
SATURDAY("Saturday", "Open from 9 to 6.");
private final String day;
private final String openingHours;
Day(String day, String openingHours) {
this.day = day;
this.openingHours = openingHours;
}
public String getDay() {
return day;
}
public String getOpeningHours() {
return openingHours;
}
}
和使用:
WorkingDay monday = new WorkingDay (Day.MONDAY, new Time(9, 0), new Time(21,0));
...
WorkingDay saturday= new WorkingDay (Day.SATURDAY, new Time(9, 0), new Time(18,0));
...
WorkingDay workingDay = ...;
System.out.println("Open from " + workingDay.getStartTime() + " to " + workingDay.getEndTime());
)您可以通过以下方式获得
枚举值的字符串
表示形式:
for (Day d : Day.values())
{
System.out.println(d);
}
这将帮助您打印天数列表
从用户获得(字符串)输入后,可以使用以下方法将其映射回枚举:
Day userInputDay = Day.valueOf(userInputString);
现在您有了正确的枚举值,您的开关
语句将发挥作用。如果您这样创建枚举:
Class WorkingDay{
Day day;
Time startTime;
Time endTime;
public WorkingDay(Day day, Time startTime, Time endTime){
this.day = day;
this.startTime = startTime;
this.endTime = endTime;
}
//getters/setters
...
}
class Time{
int hours;
int minutes;
public Time(int hours, int minutes){
...
}
public String toString(){
return hours + " : " + minutes;
}
//getters/setters
...
}
public enum Day {
SUNDAY("Sunday", "Open from 11 to 5."),
MONDAY("Monday", "Open from 9 to 9."),
TUESDAY("Tuesday", "Open from 9 to 9."),
WEDNESDAY("Wednesday", "Open from 9 to 9."),
THURSDAY("Thursday", "Open from 9 to 9."),
FRIDAY("Monday", "Open from 9 to 9."),
SATURDAY("Saturday", "Open from 9 to 6.");
private final String day;
private final String openingHours;
Day(String day, String openingHours) {
this.day = day;
this.openingHours = openingHours;
}
public String getDay() {
return day;
}
public String getOpeningHours() {
return openingHours;
}
}
您可以获得请求的日期,如:
Day day = null;
for (Day d : Day.values()) {
if (d.getDay().equals(dayInput)) {
day = d;
break;
}
}
然后就
if (day != null)
System.out.println(day.getOpeningHours());
根据Sergey的回答:
您可以向enum添加字段,因为enum被编译为内置java类enum的子类
enum WorkingDay{ MON("Monday", 9, 9), TUE... SUN("Sunday", 11,5);
String name;
int start;
int end;
//add private ctor
public static WorkingDay forString(String dayName) {
for(WorkingDay d : values())
if(d.name.equals(dayName))
return d;
}
}
当然,若你们需要在工作时间内工作,就要使用日历。
通过这种方式,您可以:
WorkingDay day = WorkingDays.forString(dayInput);
System.out.println("Open from: " + day.start + " to:" + day.end);
看这里,这几乎就是你正在做的
您已经在与switch语句进行比较,它还应该进行输出。if-else语句是不必要的,因为您正在使用switch语句进行检查。认真查看链接中的代码……您有一个bug。而不是
dayInput == "Sunday"
您应该使用equals
方法
"Sunday".equals(dayInput)
因为这实际上比较的是字符串相等,而不是引用相等。
有关更多详细信息,请参阅
或者,您可以使用以下工具:
Day day = Day.valueOf(dayInput.toUpperCase(Locale.ENGLISH))
我将把它作为一个练习留给读者,让他们找出“Friday.toUpperCase()
与“Friday.toUpperCase”(Locale.ENGLISH)
的不同之处 我宁愿这样做:
public enum Day {
MONDAY(new Time(9, Time.AM), new Time(6, Time.PM)),
// ... rest of weekdays here
SATURDAY(new Time(9, Time.AM), new Time(6, Time.PM)),
SUNDAY(new Time(11, Time.AM), new Time(5, Time.PM));
private final Time open;
private final Time close;
private Day(Time open, Time close) {
this.open = open;
this.close = close;
}
public String businessHours() {
return "Open from " + open.toString() + " to " + close.toString() + ".";
}
@Override public String toString() {
return name().substring(0, 1) + name().substring(1).toLowerCase();
}
}
主要方法:
public static void main(String[] args) {
final String dayInput = JOptionPane.showInputDialog("Please input a day: ");
try {
final Day actualDay = Day.valueOf(dayInput.toUpperCase()); // I don't know swing at all, it could be null pointer access here
} catch(IllegalArgumentException e) {
// for example print dialog with error about wrong day name
}
System.exit(0);
}
时间类可以通过toString()方法实现,但您可以简单地添加分钟数、比较等(或者您可以使用普通整数而不是创建时间类,但它非常不可扩展)。什么是EnumDay
以及为什么要创建它?如果您想走这条路,不需要工作日
课程。Java中的enum
是一个“特殊”类,您可以对其进行扩展以包含此功能(“扩展”因为没有更好的术语-您可以向enum
中添加方法和私有字段)。编辑:flesk的回答很好地说明了这一点。@BrianRoach,当我们在enum类中添加字段时,我们有预定义的实例(星期一(Time1,Time2)…)。当我们从外部设置时间参数时,我们的代码更加灵活。这对于DTO来说是很好的,但是为什么要这样做,除非您使用数据库进行持久化,而这里不是这样?