欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

零基础学Java笔记-第3周 循环

程序员文章站 2022-07-09 22:32:30
...

第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 (注意换成浮点来计算)

流程图

零基础学Java笔记-第3周 循环

程序

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没有输出