jmu-Java-PTA题解 (jmu-枚举WeekDay) 网安2312陈卓
问题要求
本题要求编写一个枚举类WeekDay,包含周一至周日7个常量。7个常量的名字为对应的英文单词大写,常量的顺序则可观察样例获得。
本题还要求编写将从控制台输入的字符串转化为WeekDay类型变量,然后使用swith根据该变量执行相应代码。
最后,本题要求输出统计结果,并得到WeekDay的常量数组,然后对其进行排序并输出。
输入格式:
输入一些字符串,代表字符常量x
输出格式:
当输入的是工作日,输出:x是工作日, 序号为y;当输入的是休息日,输出:x是工作日, 序号为y
统计结果
按顺序排序的常量数组字符串表达形式
输入样例:
MONDAY
TUESDAY
SUNDAY
FRIDAY
SATURDAY
THURSDAY
wednesday
输出样例:
MONDAY是工作日, 序号为1
TUESDAY是工作日, 序号为3
SUNDAY是休息日, 序号为0
FRIDAY是工作日, 序号为4
SATURDAY是休息日, 序号为6
THURSDAY是工作日, 序号为5
输入错误
工作日共4天
休息日共2天
[FRIDAY, MONDAY, SATURDAY, SUNDAY, THURSDAY, TUESDAY, WEDNESDAY]
关键点
- 枚举类的定义:正确定义WeekDay枚举类,包含周一至周日的 7 个常量。
- 字符串到枚举类型的转换:将从控制台输入的字符串转换为WeekDay类型的变量。
- switch语句的使用:根据WeekDay类型的变量执行相应的代码,区分工作日和休息日并进行统计。
- 数组的操作:获取WeekDay的常量数组,将其转换为字符串数组并排序输出。
解题步骤
第一步:编写枚举类WeekDay
定义WeekDay枚举类,包含周一至周日的 7 个常量。
enum WeekDay {
SUNDAY, MONDAY, WEDNESDAY, TUESDAY, FRIDAY, THURSDAY, SATURDAY
}
第二步:编写Main类进行输入处理和统计
在Main类的main方法中,使用Scanner类读取输入的字符串,将其转换为WeekDay类型的变量,使用switch语句根据该变量进行相应输出并统计工作日和休息日的数量。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int workday = 0;
int relaxday = 0;
try {
while (sc.hasNext()) {
String weekDayStr = sc.next();
WeekDay x = Enum.valueOf(WeekDay.class, weekDayStr);
switch (x) {
case SUNDAY:
System.out.println(x + "是休息日, 序号为" + WeekDay.SUNDAY.ordinal());
relaxday++;
break;
case MONDAY:
System.out.println(x + "是工作日, 序号为" + WeekDay.MONDAY.ordinal());
workday++;
break;
case TUESDAY:
System.out.println(x + "是工作日, 序号为" + WeekDay.TUESDAY.ordinal());
workday++;
break;
case WEDNESDAY:
System.out.println(x + "是工作日, 序号为" + WeekDay.WEDNESDAY.ordinal());
workday++;
break;
case THURSDAY:
System.out.println(x + "是工作日, 序号为" + WeekDay.THURSDAY.ordinal());
workday++;
break;
case FRIDAY:
System.out.println(x + "是工作日, 序号为" + WeekDay.FRIDAY.ordinal());
workday++;
break;
case SATURDAY:
System.out.println(x + "是休息日, 序号为" + WeekDay.SATURDAY.ordinal());
relaxday++;
break;
}
}
} catch (Exception e) {
System.out.println("输入错误");
}
第三步:输出统计结果和排序后的常量数组
输出工作日和休息日的统计结果,获取WeekDay的常量数组,将其转换为字符串数组并排序输出。
System.out.println("工作日共" + workday + "天");
System.out.println("休息日共" + relaxday + "天");
WeekDay[] weekDays = WeekDay.values();
String[] a = new String[weekDays.length];
for (int i = 0; i < weekDays.length; i++) {
a[i] = weekDays[i].name();
}
Arrays.sort(a);
System.out.print("[");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
if (i + 1 < a.length) {
System.out.print(", ");
}
}
System.out.println("]");
sc.close();
}
}
整体流程图:

整体代码:
import java.util.Arrays;
import java.util.Scanner;
enum WeekDay{
SUNDAY,MONDAY,WEDNESDAY,TUESDAY,FRIDAY,THURSDAY,SATURDAY
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int workday = 0;
int relaxday = 0;
try {
while(sc.hasNext()) {
String weekDayStr = sc.next();
WeekDay x;
x = Enum.valueOf(WeekDay.class,weekDayStr );
switch(x) {
case SUNDAY:System.out.println(x+"是休息日, 序号为"+WeekDay.SUNDAY.ordinal());
relaxday++;
break;
case MONDAY:System.out.println(x+"是工作日, 序号为"+WeekDay.MONDAY.ordinal());
workday++;
break;
case TUESDAY:System.out.println(x+"是工作日, 序号为"+WeekDay.TUESDAY.ordinal());
workday++;
break;
case WEDNESDAY:System.out.println(x+"是工作日, 序号为"+WeekDay.WEDNESDAY.ordinal());
workday++;
break;
case THURSDAY:System.out.println(x+"是工作日, 序号为"+WeekDay.THURSDAY.ordinal());
workday++;
break;
case FRIDAY:System.out.println(x+"是工作日, 序号为"+WeekDay.FRIDAY.ordinal());
workday++;
break;
case SATURDAY:System.out.println(x+"是休息日, 序号为"+WeekDay.SATURDAY.ordinal());
relaxday++;
break;
}
}
} catch (Exception e) {
System.out.println("输入错误");
}
System.out.println("工作日共"+workday+"天");
System.out.println("休息日共"+relaxday+"天");
String[] a = {"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};
Arrays.sort(a);
System.out.print("[");
for(int i = 0; i<7; i++){
System.out.print(a[i]);
if(i+1<7){
System.out.print(", ");
}
}
System.out.println("]");
sc.close();
}
}
思考:枚举类WeekDay将一周的七天封装为常量,使得代码更加清晰和易于维护。通过枚举类,我们可以方便地表示和操作一周的不同日期,避免了使用字符串或整数来表示日期可能带来的错误。字符串到枚举类型的转换使用了Enum.valueOf方法,这是 Java 提供的一个方便的方法,用于将字符串转换为对应的枚举常量。在使用这个方法时,需要注意输入的字符串必须与枚举常量的名称完全匹配,否则会抛出异常。在程序中,我们使用try-catch块来捕获并处理这种异常,提高了程序的健壮性。switch语句的使用使得根据不同的日期进行不同的操作变得非常简单。通过switch语句,我们可以清晰地将工作日和休息日区分开来,并进行相应的统计。这种结构使得代码的逻辑更加清晰,易于理解和维护。在处理数组时,我们首先获取WeekDay的常量数组,然后将其转换为字符串数组,最后使用Arrays.sort方法对字符串数组进行排序。这种操作展示了 Java 中数组的基本使用方法和排序功能。在实际开发中,对于需要对枚举常量进行排序或其他操作的场景,这种方法具有很强的借鉴意义。从可扩展性的角度来看,这个程序也具有一定的优势。如果后续需要添加更多的日期类型,如特殊节假日,只需要在WeekDay枚举类中添加相应的常量,并在switch语句中添加相应的处理逻辑即可。这种可扩展性使得程序能够适应不断变化的需求,在软件开发的全生命周期中具有重要的意义。

浙公网安备 33010602011771号