C/C++教程

CGB开班第五天

本文主要是介绍CGB开班第五天,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

while循环

语法格式:循环初始值;

                  while(布尔表达式){ 循环体;  步进语句; }

执行过程:先判断布尔表达式,布尔表达式为true时,执行循环体和步进语句,执行完后再次进行判断布尔表达式,一直循环到布尔表达式为false时才停止循环。

应用场景:while常用作于死循环,循环条件直接写成true。

猜数字案例:

import java.util.Random;
import java.util.Scanner;

/**
 * 本类用于while循环
 */
public class WhileLoop {

    /**
     * 电脑生成随机数的方法
     *
     * @return 返回电脑产生0-100之间的随机整数给调用处
     */
    public static int createNum() {

        Random random = new Random();

        return random.nextInt(101);
    }

    /**
     * 用户输入猜的数字的方法
     *
     * @return 返回用户猜的数字给调用处
     */
    public static int userGuess() {

        System.out.print("请输入一个0-100的整数:");

        Scanner sc = new Scanner(System.in);

        return sc.nextInt();
    }

    /**
     * 用户猜的数字和电脑随机生成的随机数进行比较的方法
     */
    public static void guess() {

        int computerNum = createNum();

        int playNum = userGuess();

        /**
         * while常用作于死循环,循环条件直接写成true
         * 死循环必须在合适的时候设置出口
         */
        while (true) {

            if (playNum == computerNum) {

                System.out.println("真厉害,猜对了!!!");

                break;

            } else if (playNum > computerNum) {

                System.out.println("真可惜,猜大了");

            } else {

                System.out.println("真可惜,猜小了");
            }

            playNum = userGuess();
        }
    }

    public static void main(String[] args) {

        /**
         * 需求:产生一个随机数,和用户猜的数字作比较,直到用于猜对
         */
        System.out.println("让我们来玩猜数字的小游戏吧!");

        guess();
    }
}

【注意】

while循环可能一次也不执行。

while循环小括号后面不能添加分号,否则会变成死循环。

do-while循环

语法格式:

do{

        循环体;

        }while(布尔表达式);

执行过程:先进行循环体,循环体运行完后在进行布尔表达式的判断,为true则继续执行循环体到判断布尔表达式为false时才停止。

【注意】

        do-while循环最少执行一次。

        do-while的while小括号后面的分号不能丢。

 int n = 0;

        int count = 0; // 统计循环次数

        do {

            System.out.println("我是循环体");

            n = new Random().nextInt(301);

            System.out.println("变量n的值为" + n);

            System.out.println();

            count++;

        }while (n != 250);

数组

数组的创建

数组是Java在内存中开辟连续空间的引用类型变量。

数组的创建分为两种:动态创建和静态创建。

静态创建数组时就会给数组当中的每一个下标元素赋值。

        静态数组的创建分为两种:

              第一种方式创建静态数组:数组类型[] 数组名 = new 数组类型[]{ 数组下标元素的值 }

              第二种方式创建静态数组:数组类型[] 数组名 = { 数组下表元素的值 }

动态创建只是在开始规定数组的长度,数组下标元素的数据是系统默认值。

        动态创建数组:数组类型[] 数组名 = new 数组类型[ 数组长度 ];

        // 1、静态创建数组的第一种方式
        int[] arrA = new int[]{1, 2, 3, 4};

        // 2、静态创建数组的第二种方式
        char[] ch = new char[]{'H', 'e', 'l', 'l', 'o'};

        // 3、动态创建数组
        String[] arrStr = new String[3];

数组的长度 

求数组的长度语法:数组名.length;

            // 静态创建数组
            int[] arrIntStaticOne = {1, 2, 3, 4, 5, 6};

            // 打印输出数组的长度
            System.out.println(arrIntStaticOne.length);  // 数组的长度为6

【注意】

        数组一旦被创建,数组的长度不可改变。

数组的下标

数组的下标:数组的下标是从0开始,最大的数组下标是数组的长度 - 1。

我们就是通过操作数组下标来对数组下标元素的值进行操作的。

Arrays.toString()方法

直接利用输出语句来打印输出数组名,得到的是一个数组在内存空间的地址值。

而利用Arrays.toString(参数列表);的方法与输出语句搭配使用就可以得到数组的下表元素的数据值。

            // 静态创建数组
            int[] arrIntStaticOne = {1, 2, 3, 4, 5, 6};

            // 打印输出数组下标元素中的值
            System.out.println(Arrays.toString(arrIntStaticOne));
            
            // 打印输出的结果为:[1, 2, 3, 4, 5, 6]

Arrays.toString(参数列表);

参数列表就是需要传入数组名。

【注意】

        Arrays工具类需要导包。

        char类型数组可以直接和输出语句使用来直接输出char类型数组下标元素的数据值。

数组的扩容与缩容

数组的扩容与缩容需要用到Arrays工具类中的copyOf(参数列表);方法

copyOf(参数列表);

参数列表1:需要扩容的数组

参数列表2:数组的长度

扩容:给数组扩大容量,新数组的长度大于原数组的长度。

扩容思路:先创建对应新长度的新数组,每个位置的默认值为0,然后从原数组中将数组复制到新数组,没有被覆盖的位置还是默认值。

缩容:缩小数组的容量,新数组长度小于缩容前数组的长度。

缩容思路:先创建对应新长度的新数组,每个位置初始化默认值为0,然后从原数组中复制指定个数的数据到新数组中,类似于"截取"一部分。

指定首尾截取原数组中的元素:

copyOfRange(); 用于完成数组的截取。
参数1:要截取哪个数组【原数组】。
参数2:从哪个下标开始。
参数3:到哪个下标结束。
截取范围:左闭右开区间。
如果下标越界,那么会即会截取,又会扩容。

【注意】

数组的扩容和缩容不是真的扩容和缩容,因为数组一旦创建长度不可改变,而是在内存中新建一个数组,将数组变量名保存的原数组的地址值替换为新数组的地址值,原数组会被Java回收机制给处理掉

循环遍历输出数组内容

    /**
     * 创建一个获取1年中12个月每个月天数的方法,并且打印输出
     */
    public static void dayOfMonth() {

        int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        for (int i = 0; i < days.length; i++) {

            System.out.println("第" + (i + 1) + "个月有:" + days[i] + "天");
        }
    }

i  < days.length;的原因是因为数组下标从开始,数组下标最大值等于数组长度-1。

如果等于数组长度,则会出现数组下标越界异常。i的每一个值都代表着days数组的每一个下标。

方法

方法的重载:

方法的重载的意义:为了提高代码的复用性和灵活性。

方法的重载:
    在同一个类中,存在方法名相同,但是参数列表不同的方法
    如果在同类中,同名方法的参数个数不同,一定构成重载
    如果在同类中,同名方法的参数个数不同,可能构成重载,需要查看方法的参数类型,和参数名无关

【注意】
    方法的重载与方法的参数类型有关
    方法的重载与方法的参数名无关
    方法的重载与方法的返回值无关
    方法的重载与方法的名称有关
    方法的重载与方法的访问修饰符无关
    方法的重载与方法的参数列表个数有关

/**
 * 本类用于演示方法的重载
 */
public class MethodOverride {

    private static void method() {

        System.out.println("哈哈哈哈哈哈,我没有参数和返回值");
    }

    public static void method(int num){

        System.out.println("哈哈哈,我的参数是" + num);
    }

    public static void main(String[] args) {

        /**
         * 通过方法名+参数列表来调用方法
         *
         * 方法的重载:
         * 在同一个类中,存在方法名相同,但是参数列表不同的方法
         *
         * 如果在同类中,同名方法的参数个数不同,一定构成重载
         * 如果在同类中,同名方法的参数个数不同,可能构成重载,需要查看方法的参数类型,和参数名无关
         *
         * 方法的重载与方法的参数类型有关
         * 方法的重载与方法的参数名无关
         * 方法的重载与方法的返回值无关
         * 方法的重载与方法的名称有关
         * 方法的重载与方法的访问修饰符无关
         * 方法的重载与方法的参数列表个数有关
         */
        method();

        method(666);
    }


}

这篇关于CGB开班第五天的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!