我需要使用枚举的帮助才能使该程序正常运行
I need help using enums to get this program working
所以这是我第一次在 Whosebug 上提问,但我需要帮助解决这个问题。我必须使用包含构造函数、方法和静态方法的枚举。
所以主要的东西都已经写完了,剩下的是我写的,但我现在迷路了。
题目是解决这写了一半的代码并有输出。输出应该是这样的:
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 的建议,那就太好了!谢谢。
enum
是 class 的一种特殊类型。单机写class。它使程序的其余部分更易于维护、阅读和推理。由于枚举中的元素是常量,因此使用所有大写名称以获得最大的可读性。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
};
现在您有了 class,您想要添加一个特征,即 "single letter" 天表示。您可以通过添加属性为 class 执行此操作。 Enums
都是常量和 classes,因此我们将利用它的 class 类特征将 "single letter" 天表示添加到 enum
。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
public String getShortName() {
return shortName;
}
};
但是,我们如何设置这个shortName
?答案是,由于 enum
是 class,我们使用构造函数。 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;
}
};
这将 "single letter" 表示置于它所代表的事物中,提供良好的代码局部性和易于维护。
在您的代码中使用它
if ( day == Day.MONDAY ) { // Typical enum comparison
System.out.println(day.getShortName()); // prints the day's short name
学习Java时,很难以良好的面向对象着手。你的问题基本上是 "how to I add something to an enum" 中的一个,但因为你使用了你的枚举,嵌入到另一个 class 中,它被错误地解决了 class。您开始编程 "how can I make this class give me the right answer for that enum"。如果可以避免的话,不要那样编程。而是编写您的代码,使 "other object" 为您提供答案。
enum
in Java 是另一种语言的想法的移植。 Java 在使 enum
看起来像 C 的枚举以及使其表现得像 Java 语言的集成组件方面做得很好。也就是说,人们最初会接触到 C 的枚举语法,这意味着他们会接触到 C 的枚举维护问题。因此,对于学习 Java 和 Java 的枚举的人来说,您的方法是可以理解的。也就是说,将 enum
用作对象将使您的代码更快、更易于阅读且更易于推理。既然您已经看到了不同的方法,请在适当的时候使用它。
所以这是我第一次在 Whosebug 上提问,但我需要帮助解决这个问题。我必须使用包含构造函数、方法和静态方法的枚举。
所以主要的东西都已经写完了,剩下的是我写的,但我现在迷路了。
题目是解决这写了一半的代码并有输出。输出应该是这样的:
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 的建议,那就太好了!谢谢。
enum
是 class 的一种特殊类型。单机写class。它使程序的其余部分更易于维护、阅读和推理。由于枚举中的元素是常量,因此使用所有大写名称以获得最大的可读性。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
};
现在您有了 class,您想要添加一个特征,即 "single letter" 天表示。您可以通过添加属性为 class 执行此操作。 Enums
都是常量和 classes,因此我们将利用它的 class 类特征将 "single letter" 天表示添加到 enum
。
public enum Day {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY;
private String shortName;
public String getShortName() {
return shortName;
}
};
但是,我们如何设置这个shortName
?答案是,由于 enum
是 class,我们使用构造函数。 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;
}
};
这将 "single letter" 表示置于它所代表的事物中,提供良好的代码局部性和易于维护。
在您的代码中使用它
if ( day == Day.MONDAY ) { // Typical enum comparison
System.out.println(day.getShortName()); // prints the day's short name
学习Java时,很难以良好的面向对象着手。你的问题基本上是 "how to I add something to an enum" 中的一个,但因为你使用了你的枚举,嵌入到另一个 class 中,它被错误地解决了 class。您开始编程 "how can I make this class give me the right answer for that enum"。如果可以避免的话,不要那样编程。而是编写您的代码,使 "other object" 为您提供答案。
enum
in Java 是另一种语言的想法的移植。 Java 在使 enum
看起来像 C 的枚举以及使其表现得像 Java 语言的集成组件方面做得很好。也就是说,人们最初会接触到 C 的枚举语法,这意味着他们会接触到 C 的枚举维护问题。因此,对于学习 Java 和 Java 的枚举的人来说,您的方法是可以理解的。也就是说,将 enum
用作对象将使您的代码更快、更易于阅读且更易于推理。既然您已经看到了不同的方法,请在适当的时候使用它。