第1关:学习-Java顺序结构之无输入求星期几
任务描述
本关任务:2017 年 1 月 1 日是星期天,求 10 天后是星期几。
相关知识
为了完成本关任务,你需要掌握:
-
% 运算符及其优先级;
-
格式化输出整型、浮点型数据。
% 运算符及其优先级
在前面的实训中,我们学习了 Java 中的加减乘除运算符的使用,那在 Java 中又是如何获取除法运算的余数呢?
例子:
- 18/5 的余数是多少?
public class Demo {
public static void main(String[] args) {
// Java 中的 % 可以用来求两数之间的余数,将这个余数赋值给变量a
int a = 18 % 5;
System.out.print(a);
}
}
执行结果:3
。
- 已知春夏秋冬分别用 1、2、3、4 表示,现在是春季,那么请问 24 个季节后是什么季节呢?
public class Demo {
public static void main(String[] args) {
// 声明 int 型变量 pre,用于表示季节种类
int pre = 4;
// 声明 int 型变量 sum,用于表示多少季节后加上当前季节的值
int sum = 24 + 1;
// 求季节总数除以季节种类的余数
int season = sum % pre;
System.out.print(season);
}
}
执行结果:
1
我们发现最后结果为 1,1 是春季的值,所以 24 个季度后就是春季。
那 % 在Java 运算符的优先级又是怎样的呢?
我们来做一个实验:分别求取 48%7/2 和 48/3%7 的值为多少?
public class Demo {
public static void main(String[] args) {
int a = 48%7/2;
int b = 48/3%7;
System.out.println(a);
System.out.print(b);// 最后一行结果输出时不换行
}
}
执行结果:
3
2
我们看到输出的结果分别为 3 和 2,由此得出 % 和乘除的优先级是一样高的,谁在前面便先执行谁,其次为加减。
格式化输出
如果我们想要输出x的值为:100,d的值为:23.496
这种格式,除了之前学过的两种输出方式外,Java 中还有一种输出命令,而且比以上两种更为复杂、强大,那就是System.out.printf
。它可以控制 tab 制表符、数字保留多少小数等,可以让输出更加规范和更加美观。
格式控制字符 | 结果 |
---|---|
%d | 整数 |
%8d | 整数,左对齐,输出宽度为 8 |
%-6d | 整数,右对齐,输出宽度为 8 |
%f | 浮点数 |
%.2f | 浮点数,四舍五入后保留两位小数 |
%8.2f | 浮点数,四舍五入后保留两位小数,左对齐,输出宽度为8 |
示例:
int x = 100;
double d = 23.496;
//一般输出方式:
System.out.println("x的值为:"+x+",d的值为:"+d);
//格式化输出方式:
System.out.printf("x的值为:%d,d的值为:%f",x,d);
执行结果:
x的值为:100,d的值为:23.496
x的值为:100,d的值为:23.496000
它的基本格式:格式控制符以一个 % 开始,一个字母结束,字母规定了方法按照何种方式打印这个值,例如 d 表示十进制整数(int),f 表示浮点数(double)。%d 和 %f 代替后面的参数,格式字符串中的格式控制字符的个数必须与后面提供的参数个数相匹配。
在 % 和转换代码之间可以插入一个整数来表示转换后的值的宽度,即输出字符串的长度。默认情况下,转换后会在字符串的左边添加空格以达到需要的长度,如果我们想在右边加入空格则应该使用负宽度(转换得到的字符串的宽度比设定的要长,宽度会被忽略)。
int x = 100;
double d = 23.496;
System.out.printf("x的值为:%6d,d的值为:%-12f。",x,d);
执行结果:
x的值为: 100,d的值为:23.496000 。
在宽度之后我们还可以插入一个小数点以及一个数值,来指定转换后的 double 值保留的小数位数(精度、四舍五入)。
double d = 23.496;
System.out.printf("d的值为:%.2f。",x,d);
执行结果:
d的值为:23.50。
如果想要换行输出怎么办呢?我们可以采用转义字符。
所有的 ASCII 码都可以用“\”加数字(一般是 8 进制数字)来表示。而 Java 中定义了一些字母前加“\”来表示常见的那些不能显示的 ASCII 字符,如 \0,\t,\n 等,就称为转义字符,因为后面的字符,都不是它本来的 ASCII 字符意思了。如下是一些常见的转义符。
转义字符 | 意义 | ASCII码值(十进制) |
---|---|---|
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\\ | 代表一个反斜线字符''' | 092 |
\' | 代表一个单引号(撇号)字符 | 039 |
\" | 代表一个双引号字符 | 034 |
\? | 代表一个问号 | 063 |
\0 | 空字符(NUL) | 000 |
在输出语句中采用换行的转义符:
double d = 23.496;
System.out.print(d+"\n");
System.out.printf("d的值为:%.2f。\n",x,d);
执行结果:
23.496
d的值为:23.50。
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码,输出格式请参见右侧“测试结果”区查看具体的输出结果。
测试说明
平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。
开始你的任务吧,祝你成功!
源代码:
/**
* 任务:2017 年 1 月 1 日是星期天,求 10 天后是星期几。
* 类名为:Week
*/
public class Week {
public static void main(String[] args) {
// 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
/********** Begin **********/
// 第一步:声明 int 型变量 pre,值为一周的总天数
int pre=7;
// 第二步:声明 int 型变量 sum,值为几天后加上周几(2017 年 1 月 1 日是周几)的值
int sum=7+10;
// 第三步:求天数除以一周的天数的余数,这个余数就是10天后为周几的值了
int weeknum=sum%pre;
// 第四步:格式化输出这个值 如果结果是1,那么输出格式为:10天后是星期 1。
System.out.print("10天后是星期 "+weeknum+"。");
/********** End **********/
}
}