java - 我需要帮助使用枚举来使该程序正常工作
问题描述
所以这是我第一次询问stackoverflow,但我需要帮助解决这个问题。我必须使用包含构造函数、方法和静态方法的枚举。
所以主要的一切都已经写好了,剩下的我写了,但我现在迷路了。
问题是解决这个写了一半的代码并得到输出。输出假设如下所示:
Today's a weekday.
The abbreviation for MONDAY is M
The abbreviation for MONDAY is T
The abbreviation for MONDAY is W
The abbreviation for MONDAY is R
The abbreviation for MONDAY is F
The abbreviation for MONDAY is S
The abbreviation for MONDAY is Y
SUNDAY
MONDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
SUNDAY
true
true
true
true
到目前为止我的代码:
import java.util.List;
public class DayOfWeekDriver
{
public enum DayOfWeek{
MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"), THURSDAY("R"), FRIDAY("F"), SATURDAY("S"), SUNDAY("S");
static{
MONDAY.next = TUESDAY;
TUESDAY.next = WEDNESDAY;
WEDNESDAY.next = THURSDAY;
THURSDAY.next = FRIDAY;
FRIDAY.next = SATURDAY;
SATURDAY.next = SUNDAY;
SUNDAY.next = MONDAY;
}
private DayOfWeek next;
public DayOfWeek nextDay(){
return next;
}
private String abbreviation;
private String day;
DayOfWeek(String abbreviation) {
this.abbreviation = abbreviation;
}
public String getAbbreviation() {
return abbreviation;
}
public String getDays(){
return day;
}
}
public char getLetter(){
}
public static void main(String[] args)
{
DayOfWeek today = DayOfWeek.FRIDAY;
if (today == DayOfWeek.SATURDAY || today == DayOfWeek.SUNDAY)
{
System.out.println("Today's a weekend.");
}
else
{
System.out.println("Today's a weekday.");
}
for (DayOfWeek day : DayOfWeek.values())
{
System.out.printf("The abbreviation for %s is %c \n",
day, day.getLetter());
}
for (Character c : "YMWFTRS".toCharArray())
{
System.out.println(DayOfWeek.toDayOfWeek(c));
}
List<DayOfWeek> list = DayOfWeek.getDays();
System.out.println(list.get(0) == DayOfWeek.values()[0]);
System.out.println(DayOfWeek.MONDAY.next() == DayOfWeek.TUESDAY);
System.out.println(today.next() == DayOfWeek.SATURDAY);
System.out.println(DayOfWeek.SUNDAY.next() == DayOfWeek.MONDAY);
}
}
而且,如果我能得到建议,在哪里学习更多关于 java 的知识,那就太好了!谢谢你。
解决方案
Anenum
是一种特殊的类。把它写成一个独立的类。它使程序的其余部分更易于维护、阅读和推理。由于枚举中的元素是常量,因此请使用所有大写名称以获得最大的可读性。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
};
现在您有了一个课程,您想添加一个功能,即“单字母”日表示。您可以通过添加属性来为类执行此操作。 Enums
既是常量又是类,因此我们将enum
通过利用它的类类特性将“单字母”日表示添加到 中。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
public String getShortName() {
return shortName;
}
};
但是,我们如何设置shortName
呢?答案是,既然enum
是类,我们就使用构造函数。 enum
构造函数存在,但它们受到约束。它们必须是private
为了防止构造新实例(枚举的一个特性)。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
private Day(String abbreviation) {
shortName = abbreviation;
}
public String getShortName() {
return shortName;
}
};
这就引出了最后一个问题,我们如何声明要传递给构造函数的值。好吧,你在声明静态值时就这样做了,就像这样
public enum Day {
SUNDAY("S"),
MONDAY("M"),
TUESDAY("T"),
WEDNESDAY("W"),
THURSDAY("R"),
FRIDAY("F"),
SATURDAY("Y");
private String shortName;
private Day(String abbreviation) {
shortName = abbreviation;
}
public String getShortName() {
return shortName;
}
};
这将“单字母”表示置于它所表示的事物中,从而提供良好的代码局部性和易于维护。
在您的代码中使用它
if ( day == Day.MONDAY ) { // Typical enum comparison
System.out.println(day.getShortName()); // prints the day's short name
学习 Java 时,很难从良好的面向对象开始。您的问题基本上是“如何向枚举添加内容”之一,但是因为您使用了嵌入到另一个类中的枚举,所以它在错误的类中得到了解决。你开始编程“我怎样才能让这门课给我那个枚举的正确答案”。不要那样编程,如果你能避免的话。而是编写您的代码,以便“其他对象”为您提供答案。
enum
在 Java 中是另一种语言的想法的一个端口。Java 在使它enum
看起来像 C 的枚举和使其表现得像 Java 语言的集成组件方面做得很好。也就是说,人们最初会接触到 C 的枚举语法,这意味着他们会接触到 C 的枚举维护问题。因此,对于学习 Java 和 Java 枚举的人来说,您的方法是可以理解的。也就是说,将enum
用作对象将使您的代码更快、更易于阅读和更易于推理。既然您已经看到了不同的方法,请在适当的时候使用它。
推荐阅读
- c++ - OpenCV - findEssentialMat 后正确恢复姿势
- ios - 如何使用 Swift 在运行时更改 iOS 外观
- reactjs - 如何让 JavaScript date.getFullYear() 进入 React
- r - 我在 cran 和 github 中找不到包工具
- mysql - 为插入分割字符串的mysql查询?
- r - 从 twitter id 列表中获取 twitter 屏幕名称?
- ios - 无法触发 Firebase Cloud 功能以将付款方式保存到现有 Stripe 客户
- javascript - 羽毛笔:从数据库加载数据显示“真”而不是存储值
- javascript - 登录重定向成功后 Auth0 isAuthenticated() 返回 false
- regex - 带有可选部分的正则表达式字符串