零基础学Java笔记-浙大MOOC翁恺-第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=ni=1nXi

让用户输入一系列的正整数,最后输入-1表示输入结束,然后程序计算出这些数字的平均数,输出输入的数字的个数和平均数

变量->算法->流程图->程序

变量

  • 一个记录读到的整数的变量
  • 平均数要怎么算?
    • 只需要每读到一个数,就把它加到一个累加的变量里,到全部数据读完,再拿它去除读到的数的个数就可以了
  • 一个变量记录累加的结果,一个变量记录读到的数的个数

算法

  1. 初始化变量sum和count为0;
  2. 读入number;
  3. 如果number不是-1,则将number加入sum,并将count加1,回到2;
  4. 如果number是-1,则计算和打印出sum/ count (注意换成浮点来计算)

流程图

image-20210622095310307

程序

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);
        }
    }
}

⚠️⚠️⚠️

  1. 出现除法,一定要先判断除数是否为0;
  2. 根据流程图写代码;
  3. 注意边界数据的测试;
  4. 深化认识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没有输出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值