(头歌)Java程序设计--------switch 语句

第1关:判断周末

任务描述

本关任务:掌握使用 switch 语句实现多分支控制结构,并掌握其特性。编写程序,根据输入判断是否是周末并输出。

相关知识

为了完成本关任务,你需要掌握:

  1. switch 语句结构;
  2. switch 语句规则;
  3. switch 语句执行顺序;

switch 语句结构

switch 语句是 Java 提供的一种多分支控制结构。尽管 switch 语句和其他的控制结构实现方式有那么多功能重叠的地方,以至于你会觉得 switch 语句不是那么的必要,但也请你认真学习 switch 语句,技多不压身嘛。更何况,在一些特定的任务场景下,switch 语句有得天独厚的优势。

switch 语句结构如下所示:

  1. switch (switch 表达式) {
  2. case 值 1: 语句(组) 1;
  3. break ;
  4. case 值 2: 语句(组) 2;
  5. break ;
  6. case 值 3: 语句(组) 3;
  7. break ;
  8. ...
  9. case 值 N: 语句(组) N;
  10. break ;
  11. default: 默认情况下执行的语句组;
  12. }

其中switch 表达式是选择执行的依据,可以是变量也可以是表达式。 当switch 表达式的值等于某个case关键字后的值时,相应的语句(组)将会被执行。

default关键字对应语句(组)在所有case关键字对应的值都没有匹配switch 表达式的时候,将被执行。

注意: 每个case关键字对应语句组后,都会跟着一个break关键字,代表执行完当前语句组后,退出 switch 语句,详细原因将在后文讲解。 如下给出了根据阿拉伯数字输出相应英文单词的实例:

  1. /** 代码清单 1 */
  2. switch (x){
  3. case 1:
  4. System.out.println("one");
  5. break;
  6. case 2:
  7. System.out.println("two");
  8. break;
  9. case 3:
  10. System.out.println("three");
  11. break;
  12. case 4:
  13. System.out.println("four");
  14. break;
  15. case 5:
  16. System.out.println("five");
  17. break;
  18. case 6:
  19. System.out.println("six");
  20. break;
  21. case 7:
  22. System.out.println("seven");
  23. break;
  24. case 8:
  25. System.out.println("eight");
  26. break;
  27. case 9:
  28. System.out.println("nine");
  29. break;
  30. case 0:
  31. System.out.println("zero");
  32. break;
  33. default:
  34. System.err.println("default");
  35. }

代码清单 1来看,switch 语句与多分支 if-else 语句同样具有清晰规整的优点。

switch 语句规则

switch 语句满足以下规则:

  • switch 表达式必须用小括号包围,并且能计算出charbyteshortint或者String类型的值;
  • case 后的值不能包含变量;
  • default 是可选的,当没有 case 与 switch 语句匹配时, 执行该操作;
  • break 语句是可选的,当执行到 break 时,立即终止 switch 语句。

从 switch 语句的规则可以总结出,switch 语句中的不同case部分其实是自上而下顺序执行的。但我们可以通过设置switch 表达式以及break语句来灵活的控制case部分的执行,这其实比使用嵌套多分支更加灵活。

switch 语句执行顺序

当有一个case语句与switch 表达式匹配时,开始执行相应的操作,如果没有遇到break语句,后面case的操作也将执行。 示例:

  1. /** 代码示例 2 */
  2. switch (x){
  3. case 1:
  4. System.out.println("1");
  5. case 2:
  6. System.out.println("2");
  7. case 3:
  8. System.out.println("3");
  9. case 4:
  10. System.out.println("4");
  11. default:
  12. System.err.println("default");
  13. }

x = 2时:

输出:

  1. 2
  2. 3
  3. 4
  4. default

以下是 switch 语句的另一个实例写法:

  1. /** 代码清单 3 */
  2. switch(x){
  3. case 0:
  4. case 1:
  5. case 2:
  6. case 3: System.out.println("3");
  7. case 4:
  8. case 5: System.out.println("5"); break;
  9. default: System.out.println("default");
  10. }

根据x值的不同,会有不同的输出。

x = 2时:

输出:3

   5

编程要求

在右侧代码编辑器 Begin-End 区域补充代码,根据输入的单词,判断是否是周末。具体要求如下:

  • 输入一个字符串(例如Sunday)表示星期几。字符串的使用方法将在测试说明的提示中给出;

  • 根据输入的字符串,输出是否是周末,是周末则输出字符串Weekend,是工作日则输出字符串Weekday,其他字符串则输出ops。末尾均无换行。

例如,输入为字符串Sunday, 输出字符串Weekend。对应关系如下: Sunday: Weekend Monday: Weekday Tuesday: Weekday Wednesday: Weekday Thursday: Weekday Friday: Weekday Saturday: Weekday

测试说明

平台会对你编写的代码进行测试:

测试输入:Sunday; 预期输出: Weekend

测试输入:sunday; 预期输出: ops

提示 判断字符串的 switch 语句:

  1. String str = "abc";
  2. switch(str){
  3. case "a":
  4. case "ab":
  5. case "abc":
  6. default:
  7. }

输出无换行字符串:

  1. System.out.print("abc");

输出:

  1. abc

代码如下 

package step1;
import java.util.Scanner;

public class Weekend 
{
    public static void main(String[] args) 
{
        Scanner input = new Scanner(System.in);
        String word = input.next();
        /********* Begin *********/
        switch(word){
            case "Monday":
                System.out.println("Weekday");break;
            case "Tuesday":
                System.out.println("Weekday");break;
            case "Wednesday":
                System.out.println("Weekday");break;
            case "Thursday":
                System.out.println("Weekday");break;
            case "Friday":
                System.out.println("Weekday");break;
            case "Saturday":
                System.out.println("Weekend");break;
            case "Sunday":
                System.out.println("Weekend");break;
            default:
                System.out.println("ops");break;
        }

        /********* End *********/
        input.close();
    }
}

第2关:输出年份生肖

任务描述

本关任务:巩固 switch 语句的用法。编写一个程序,根据输入的年份数,输出相应的生肖。

相关知识

为了完成本关任务,你需要掌握:

  1. 年份生肖;
  2. 难点思路讲解。

年份生肖

每一个年份都对应着一个中国生肖,在相应农历年份出生的人,这个人的属相就是相应的生肖,例如,1994 年出生的人属狗,农历 1994 年也称狗年。

中国生肖一共有 12 个, 按照如下顺序周而复始。

1990 年和 1912 年对应生肖鼠,以此类推。

难点思路讲解

首先,不难发现生肖是每 12 年一个轮回的,因此可以通过模运算符 % 得到某种余数来从而判断生肖,示例如下:

  1. /** 代码清单 1 */
  2. a = 1900%12
  3. System.out.print(a)

输出: 4 通过代码清单 1可以发现公元 1990 年是鼠年,它的余数是 4,那么所有余数是 4 的年份是不是都是鼠年呢?

其次,对于公元前的年份,也需要考虑,本任务用负数来表示公元前的年份,例如 -4 表示公元前 4 年。而负数的模运算,得到的结果是负数,例如:

  1. /** 代码清单 2 */
  2. system.out.print(-4%12);

输出:-4

对于公元前的年份,又该如何判断其生肖呢?请积极的思考吧。

编程要求

根据提示,在右侧编辑器 Begin-End 区域补充代码,输入年份数字,输出相应的生肖。具体要求如下:

  • 输入一个int类型的数值代表年份,例如 1990 代表公元 1990 年、-226 代表公元前 226 年;
  • 输出该年份对应的生肖。例如 1990 年时,输出字符串,结尾无换行。

测试说明

平台会对你编写的代码进行测试:

测试输入:1900; 预期输出:

测试输入:1994; 预期输出:

代码如下 

package step2;
import java.util.Scanner;

public class Zodiac 
{
    public static void main(String[] args) 
{
        Scanner input = new Scanner(System.in);
        int year = input.nextInt();
        /********* Begin *********/
        int a=(year-1994)%12;
        switch(a)
        {
        case 2:System.out.print("鼠");break;
        case 3:System.out.print("牛");break;
        case 4:System.out.print("虎");break;
        case 5:System.out.print("兔");break;
        case 6:System.out.print("龙");break;
        case 7:System.out.print("蛇");break;
        case 8:System.out.print("马");break;
        case 9:System.out.print("羊");break;
        case 10:System.out.print("猴");break;
        case 11:System.out.print("鸡");break;
        case 0:System.out.print("狗");break;
        case 1:System.out.print("猪");break;
        case -10:System.out.print("鼠");break;
        case -9:System.out.print("牛");break;
        case -8:System.out.print("虎");break;
        case -7:System.out.print("兔");break;
        case -6:System.out.print("龙");break;
        case -5:System.out.print("蛇");break;
        case -4:System.out.print("马");break;
        case -3:System.out.print("羊");break;
        case -2:System.out.print("猴");break;
        case -1:System.out.print("鸡");break;
        case -11:System.out.print("猪");break;
        }
        /********* End *********/
        input.close();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

失棉的羊 .

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

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

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

打赏作者

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

抵扣说明:

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

余额充值