零基础学Java笔记-第3周 循环
第3周 循环
3.1 循环
if语句可以判断条件是否满足,满足时才做相应的动作,而循环语句可以在满足条件时,不断地重复执行一些动作。
重复执行的语句(循环语句)可以多次执行其他语句,它检查一个逻辑条件是否满足,只在满足的时候执行它的循环体。
-
while语句是一个循环语句,它会首先判断一个条件是否满足,如果条件满足,则执行后面紧跟着的语句或语句括号,然后再次判断
条件是否满足,如果条件满足则再次执行,直到条件不满足为止。后面紧跟的语句或语句括号,就是循环体。
while先判断,再执行;先判断条件再进入;可能一次都不执行循环体
-
do-while循环和while循环很像,唯一的区别是我们在循环体执行结束的时候才来判断条件。也就是说,无论如何,循环都会执行至少一遍,然后再来判断条件。与while循环相同的是,条件满足时执行循环,条件不满足时结束循环。
do-while先执行,再判断;先执行一次循环体,再判断条件是否继续执行;循环体一定能被执行至少一次
-
写好一个程序后,需要验证和测试;
验证:草演表格、print、debug
测试数据:边界、个位数、10、0、负数
-
人 vs 计算机:人与计算机擅长不同的事情
- 计算机模仿人做事——朴素
- 利用计算机擅长的特性编程——高级
-
数数
while先判断,再执行;先判断条件再进入;可能一次都不执行循环体
do-while先执行,再判断;先执行一次循环体,再判断条件是否继续执行;循环体一定能被执行至少一次
int count = 0;
while( num>0 )
{
num = num/10;
count = count+1;
}
//num=0,count=0;❌
int count = 0;
do
{
num = num/10;
count = count+1;
}while( num>0 );
//num=0,count=1;✅
3.2 循环的例子
计数循环
while
int count = 100;
while( count >= 0){
count = count-1;
System.out.println(count);
}
System.out.println(count);
System.out.println("发射!");
在循环中,有三个问题需要关注:
- 这个循环需要执行多少次?【100/99/101】
- 循环停下来的时候,有没有输出最后的0?
- 循环结束后,count值是多少?
程序中的小细节:
-
count >= 0
是>=
【改成>
会怎么样?】 - 先
count = count-1;
再System.out.println(count);
【改变顺序会怎么样?】
debug小技巧
- 遇到这样的程序时,让count=10,分析清楚再推广到count数值较大的情况
do-while时情况如何?
int count = 100;
do
{
count = count-1;
System.out.println(count);
}while( count >= 0);
System.out.println(count);
System.out.println("发射!");
算平均数
s u m = ∑ i = 1 n X i n sum = \frac{\sum_{i=1}^n X_i}{n} sum=n∑i=1nXi
让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数
变量->算法->流程图->程序
变量
- 一个记录读到的整数的变量
- 平均数要怎么算?
- 只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了
- 一个变量记录累加的结果,一个变量记录读到的数的个数
算法
- 初始化变量sum和count为0;
- 读入number;
- 如果number不是-1,则将number加入sum,并将count加1,回到2;
- 如果number是-1,则计算和打印出sum/ count (注意换成浮点来计算)
流程图
程序
import java.util.Scanner;
public class sum {
public static void main(String[] args) {
double sum = 0;
int number = 0;
int count = 0;
Scanner in = new Scanner(System.in);
number = in.nextInt();
while(number!=-1){
sum=sum+number;
count++;
number = in.nextInt();
}
if(count>0)
{
System.out.println("平均数="+sum/count);
}
}
}
import java.util.Scanner;
public class sum {
public static void main(String[] args) {
double sum = 0;
int number = 0;
int count = 0;
Scanner in = new Scanner(System.in);
do{
number = in.nextInt();
if(number!=-1) {
sum = sum + number;
count++;
}
}while (number!=-1);
if(count>0)
{
System.out.println("平均数="+sum/count);
}
}
}
⚠️⚠️⚠️
- 出现除法,一定要先判断除数是否为0;
- 根据流程图写代码;
- 注意边界数据的测试;
- 深化认识while与do-while的区别
猜数游戏
-
让计算机来想一个数,然后让用户来猜,用户每输入一个数,就告诉它是大了还是小了,直到用户猜中为止,最后还要告诉用户它猜了多少次。
-
因为需要不断重复让用户猜,所以需要用到循环
-
在实际写出程序之前,我们可以先用文字描述程序的思路
-
核心重点是循环条件
- 人们往往会考虑循环终止的条件,而在程序中需要写循环继续的条件
import java.util.Scanner;
public class numberGame {
public static void main(String[] args) {
int number =(int)(Math.random()*100+1); //[0,1)-->[0,100)-->[1,100]
int a =0 ;
int count = 0;
Scanner in = new Scanner(System.in);
a = in.nextInt();
count++;
while (a!=number){
count++;
if(a>number)
{
System.out.println("你的数字大了");
}
else
{
System.out.println("你的数字小了");
}
a = in.nextInt();
}
System.out.println("猜对了!你猜了"+ count +"次");
}
}
import java.util.Scanner;
public class numberGame {
public static void main(String[] args) {
int number =(int)(Math.random()*100+1); //[0,1)-->[0,100)-->[1,100]
int a =0 ;
int count = 0;
Scanner in = new Scanner(System.in);
do{
a = in.nextInt();
count++;
if(a>number)
{
System.out.println("你的数字大了");
}
else if(a<number)
{
System.out.println("你的数字小了");
}
}while (a!=number);
System.out.println("猜对了!你猜了"+ count +"次");
}
}
//没有任何先决条件,先做一次循环,适合用do-while
整数分解
-
一个整数是由1至多位数字组成的,如何分解出整数的各个位上的数字,然后加以计算
- 对一个整数做%10的操作,就得到它的个位数;
- 对一个整数做/ 10的操作,就去掉了它的个位数;
- 然后再对2的结果做% I0,就得到原来数的十位数了;
- 依此类推。
-
数的逆序
import java.util.Scanner;
public class numberReserve {
public static void main(String[] args) {
int number;
int result = 0;
Scanner in = new Scanner(System.in);
number = in.nextInt();
do {
int digit = number%10;
result = result*10+digit;
System.out.print(digit); //方案1:得到一位输出一位,0不能避免
number/=10;
}while (number>0);
System.out.println();
System.out.println(result);//方案2:得到结果再输出
}
}
//如果用while循环,输入为0时,方案1没有输出