第1关:判断周末
任务描述
本关任务:掌握使用 switch 语句实现多分支控制结构,并掌握其特性。编写程序,根据输入判断是否是周末并输出。
相关知识
为了完成本关任务,你需要掌握:
- switch 语句结构;
- switch 语句规则;
- switch 语句执行顺序;
switch 语句结构
switch 语句是 Java 提供的一种多分支控制结构。尽管 switch 语句和其他的控制结构实现方式有那么多功能重叠的地方,以至于你会觉得 switch 语句不是那么的必要,但也请你认真学习 switch 语句,技多不压身嘛。更何况,在一些特定的任务场景下,switch 语句有得天独厚的优势。
switch 语句结构如下所示:
switch (switch 表达式) {
case 值 1: 语句(组) 1;
break ;
case 值 2: 语句(组) 2;
break ;
case 值 3: 语句(组) 3;
break ;
...
case 值 N: 语句(组) N;
break ;
default: 默认情况下执行的语句组;
}
其中switch 表达式
是选择执行的依据,可以是变量也可以是表达式。 当switch 表达式
的值等于某个case
关键字后的值时,相应的语句(组)
将会被执行。
default
关键字对应语句(组)
在所有case
关键字对应的值都没有匹配switch 表达式
的时候,将被执行。
注意: 每个case
关键字对应语句组后,都会跟着一个break
关键字,代表执行完当前语句组后,退出 switch 语句,详细原因将在后文讲解。 如下给出了根据阿拉伯数字输出相应英文单词的实例:
/** 代码清单 1 */
switch (x){
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
case 4:
System.out.println("four");
break;
case 5:
System.out.println("five");
break;
case 6:
System.out.println("six");
break;
case 7:
System.out.println("seven");
break;
case 8:
System.out.println("eight");
break;
case 9:
System.out.println("nine");
break;
case 0:
System.out.println("zero");
break;
default:
System.err.println("default");
}
从代码清单 1
来看,switch 语句与多分支 if-else 语句同样具有清晰、规整的优点。
switch 语句规则
switch 语句满足以下规则:
- switch 表达式必须用小括号包围,并且能计算出
char
,byte
,short
,int
或者String
类型的值; - case 后的值不能包含变量;
- default 是可选的,当没有 case 与 switch 语句匹配时, 执行该操作;
- break 语句是可选的,当执行到 break 时,立即终止 switch 语句。
从 switch 语句的规则可以总结出,switch 语句中的不同case
部分其实是自上而下顺序执行的。但我们可以通过设置switch 表达式
以及break
语句来灵活的控制case
部分的执行,这其实比使用嵌套多分支更加灵活。
switch 语句执行顺序
当有一个case
语句与switch 表达式
匹配时,开始执行相应的操作,如果没有遇到break
语句,后面case
的操作也将执行。 示例:
/** 代码示例 2 */
switch (x){
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3:
System.out.println("3");
case 4:
System.out.println("4");
default:
System.err.println("default");
}
当
x = 2
时:输出:
2
3
4
default
以下是 switch 语句的另一个实例写法:
/** 代码清单 3 */
switch(x){
case 0:
case 1:
case 2:
case 3: System.out.println("3");
case 4:
case 5: System.out.println("5"); break;
default: System.out.println("default");
}
根据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 语句:
String str = "abc";
switch(str){
case "a":
case "ab":
case "abc":
default:
}
输出无换行字符串:
System.out.print("abc");
输出:
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 语句的用法。编写一个程序,根据输入的年份数,输出相应的生肖。
相关知识
为了完成本关任务,你需要掌握:
- 年份生肖;
- 难点思路讲解。
年份生肖
每一个年份都对应着一个中国生肖,在相应农历年份出生的人,这个人的属相就是相应的生肖,例如,1994 年出生的人属狗,农历 1994 年也称狗年。
中国生肖一共有 12 个, 按照如下顺序周而复始。
鼠
牛
虎
兔
龙
蛇
马
羊
猴
鸡
狗
猪
1990 年和 1912 年对应生肖鼠,以此类推。
难点思路讲解
首先,不难发现生肖是每 12 年一个轮回的,因此可以通过模运算符 %
得到某种余数来从而判断生肖,示例如下:
/** 代码清单 1 */
a = 1900%12
System.out.print(a)
输出: 4
通过代码清单 1
可以发现公元 1990 年是鼠年,它的余数是 4,那么所有余数是 4 的年份是不是都是鼠年呢?
其次,对于公元前的年份,也需要考虑,本任务用负数来表示公元前的年份,例如 -4 表示公元前 4 年。而负数的模运算,得到的结果是负数,例如:
/** 代码清单 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();
}
}