JAVA经典百题之判断星期几

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

解题思路
这题目要求根据输入的星期几的第一个字母来判断是星期几,如果第一个字母相同,则继续判断第二个字母。我们可以实现一个函数,接受输入的星期首字母,并返回对应的星期。

  1. 使用if-else分支判断:根据输入的第一个字母进行分支判断,再根据需要,进一步判断第二个字母。
  2. 使用哈希表:构建一个哈希表,将每个字母映射到对应的星期几,然后根据输入的字母查表得到结果。
  3. 使用Switch语句:使用Switch语句进行多重条件判断,根据不同的输入字母输出对应的星期几。

现在,让我们使用这三种方法来实现根据输入的星期首字母判断星期几。

方法1: 使用if-else分支判断

  • 实现代码
import java.util.Scanner;

public class WeekdayCalculator {
    public static String determineDay(char firstChar, char secondChar) {
        String day;
        
        if (firstChar == 'm') {
            if (secondChar == 'o')
                day = "Monday";
            else
                day = "None";
        } else if (firstChar == 't') {
            if (secondChar == 'u')
                day = "Tuesday";
            else if (secondChar == 'h')
                day = "Thursday";
            else
                day = "None";
        } else if (firstChar == 'w') {
            day = "Wednesday";
        } else if (firstChar == 'f') {
            day = "Friday";
        } else if (firstChar == 's') {
            if (secondChar == 'a')
                day = "Saturday";
            else if (secondChar == 'u')
                day = "Sunday";
            else
                day = "None";
        } else {
            day = "None";
        }
        
        return day;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the first letter of the day: ");
        char firstChar = scanner.next().charAt(0);
        System.out.print("Enter the second letter of the day: ");
        char secondChar = scanner.next().charAt(0);

        String day = determineDay(firstChar, secondChar);
        if (day.equals("None"))
            System.out.println("Invalid input.");
        else
            System.out.println("The day is: " + day);
    }
}
  • 优点
    • 直观易懂,基于星期首字母的定义。
    • 简单,不依赖特定的语言或库。
  • 缺点
    • 可能需要多重嵌套的条件判断,代码可能较长。

方法2: 使用哈希表

  • 解题思路
    • 使用哈希表将输入的字母与对应的星期几建立映射关系,根据输入的字母查找哈希表得到结果。
  • 实现代码
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class WeekdayCalculator {
    public static String determineDay(char firstChar, char secondChar) {
        Map<String, String> dayMap = new HashMap<>();
        dayMap.put("mo", "Monday");
        dayMap.put("tu", "Tuesday");
        dayMap.put("we", "Wednesday");
        dayMap.put("th", "Thursday");
        dayMap.put("fr", "Friday");
        dayMap.put("sa", "Saturday");
        dayMap.put("su", "Sunday");
        
        String input = "" + firstChar + secondChar;
        return dayMap.getOrDefault(input, "None");
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the first letter of the day: ");
        char firstChar = scanner.next().charAt(0);
        System.out.print("Enter the second letter of the day: ");
        char secondChar = scanner.next().charAt(0);

        String day = determineDay(firstChar, secondChar);
        if (day.equals("None"))
            System.out.println("Invalid input.");
        else
            System.out.println("The day is: " + day);
    }
}
  • 优点
    • 更具扩展性,易于维护和修改映射关系。
    • 不需要多重嵌套的条件判断。
  • 缺点
    • 需要额外的哈希表数据结构,可能会稍微增加代码复杂度。

方法3: 使用Switch语句

  • 解题思路
    • 使用Switch语句进行多重条件判断,根据不同的输入字母输出对应的星期几。
  • 实现代码
import java.util.Scanner;

public class WeekdayCalculator {
    public static String determineDay(char firstChar, char secondChar) {
        String day;
        
        switch (firstChar) {
            case 'm':
                if (secondChar == 'o')
                    day = "Monday";
                else
                    day = "None";
                break;
            case 't':
                if (secondChar == 'u')
                    day = "Tuesday";
                else if (secondChar == 'h')
                    day = "Thursday";
                else
                    day = "None";
                break;
            case 'w':
                day = "Wednesday";
                break;
            case 'f':
                day = "Friday";
                break;
            case 's':
                if (secondChar == 'a')
                    day = "Saturday";
                else if (secondChar == 'u')
                    day = "Sunday";
                else
                    day = "None";
                break;
            default:
                day = "None";
        }
        
        return day;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the first letter of the day: ");
        char firstChar = scanner.next().charAt(0);
        System.out.print("Enter the second letter of the day: ");
        char secondChar = scanner.next().charAt(0);

        String day = determineDay(firstChar, secondChar);
        if (day.equals("None"))
            System.out.println("Invalid input.");
        else
            System.out.println("The day is: " + day);
    }
}
  • 优点
    • 使用Switch语句简化了代码。

    • 简洁,易读。

  • 缺点
    • 相对于哈希表法,需要进行多次条件判断。

总结和推荐

  • 在这种特定问题中,三种方法都能够实现正确的功能。
  • 从代码简洁度、通用性、效率等方面考虑,方法2(使用哈希表)可能是最好的选择,因为它能够达到较好的效率,同时不需要依赖额外数据结构。
  • 在实际情况中,可以根据问题的复杂度、代码的可维护性和可扩展性来选择最适合的实现方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高大人在上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值