任务描述
本关任务:给定一个大于 1 的正整数 n,求所有小于 n 的自然数的平均值(保留两位小数)。 自然数的定义:大于等于 0 的整数。
相关知识
当我们想要对同样的操作执行多次,就需要使用到循环结构,在 Java 中循环结构主要分为三种:
- while 循环;
- do...while 循环;
- for 循环。
之前我们已经学习了 while 循环,今天我们来学习跟 while 循环相似的另一种循环结构 —— do...while 循环。
do...while 循环
首先我们来了解一下 do...while 循环的逻辑:
图1
如上图1所示,do...while 循环首先会执行一遍循环体语句,然后再判断 while 后面的条件是否成立,成立的话继续执行循环体语句,不成立的话退出循环,它的语法格式如下所示:
1. do {
2. 循环体语句序列;
3. } while(循环条件表达式);
do...while 循环与 while 循环的区别就在于 do...while 循环是先执行循环语句,后判断,而 while 循环是先判断,后执行循环语句,也就是说 do...while 循环会保证循环体语句最少被执行一遍。
do...while 循环使用案例:循环打印”好好学习,天天向上“ n 次。
1. public class DWhileTest {
2. public static void main(String[] args) {
3. // 定义整数变量i,并赋初值0
4. int i=0;
5. // 创建Scanner对象
6. Scanner input = new Scanner(System.in);
7.
8. // 获取输入的整数值
9. int n = input.nextInt();
10.
11. // 在do后的花括号中编写循环语句
12. do{
13. System.out.print("好好学习,天天向上");
14. i++;
15. }
16. // 在while后判断条件
17. while(i<n);
18. }
19. }
当 n=5 时,控制台输出结果:
1. 好好学习,天天向上
2. 好好学习,天天向上
3. 好好学习,天天向上
4. 好好学习,天天向上
5. 好好学习,天天向上
编程要求
仔细阅读右侧编辑区内给出的代码框架及注释,按照提示编写程序代码。
/*
任务:通过Scanner对象获取输入值n,求所有小于n的自然数的平均值。
输出的平均值请转化为double类型。
*/
import java.util.Scanner;
public class DWhileTest {
public static void main(String[] args) {
// 定义变量n,接收输入值
int n;
// 定义求和变量sum,并赋初值0
int sum=0;
// 定义变量i,并赋初值0
int i=0;
//创建Scanner对象
Scanner input = new Scanner(System.in);
// 请在Begin-End间编写代码
/********** Begin **********/
// 获取输入值n
n = input.nextInt();
do{
sum+=i;
i++;
}
// 在while后判断条件,当i小于n时退出循环
while(i<n);
double avg = (double)sum / n;
// 输出平均值,保留两位小数
System.out.printf("%.2f",avg);
/********** End **********/
}
}