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语句中添加相应的处理逻辑即可。这种可扩展性使得程序能够适应不断变化的需求,在软件开发的全生命周期中具有重要的意义。

posted @ 2025-05-07 18:04  取名字比写博客还难  阅读(19)  评论(0)    收藏  举报