08-Debug和编程练习

第一章:Debug模式

1.1什么是Debug模式

是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。

1.2Debug模式操作流程

  • 如何加断点

    • 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可

    细节:

    ​ 在每一个方法的第一行有效语句前面打上断点,而且一个方法,只打一个。

    01

  • 如何运行加了断点的程序

    • 在代码区域右键Debug执行

    02

  • 看哪里

    • 看Debugger窗口

    03

    • 看Console窗口

    04

  • 点哪里

    • 点Step Into (F7)这个箭头,也可以直接按F7

    05

  • 如何删除断点

    • 选择要删除的断点,单击鼠标左键即可

    06

    • 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除

    07

1.3 debugder断点调试的细节

1.断点调试可以控制程序一步一步的运行,停在背景色变深的那行代码

2.断点调试不会回到上一步。

3.如果在断点调试中涉及打印语句,会把结果输出到控制台上面

4.如果在断点调试中涉及键盘录入,那么必须要到控制台输入数字,否则断点调试无法向下运行

第二章 编程思维训练

3.1 练习1求和(掌握)

​ 有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。

求出该数组中满足要求的元素和,要求是:求和的元素个位和十位都不能是7,并且只能是偶数。

代码示例:

//1.定义数组
int[] arr = {68,27,95,88,171,996,51,210};
//定义求和变量
int sum = 0;
//2.遍历数组得到每一个元素
for (int i = 0; i < arr.length; i++) {
    //条件一:个位不能是7
    //条件二:十位不能是7
    //条件三:只能是偶数
    //先获得个位
    int ge = arr[i] % 10;
    //再获得十位
    int shi = arr[i] / 10 % 10;
    if(ge != 7 &&  shi != 7 && arr[i] % 2 ==0){
        sum = sum + arr[i]; //+=
    }
}
//3.打印输出
System.out.println(sum);

3.2 练习2 查找元素(掌握)

将 1~ 100 之间的10个随机数存入到数组当中。

键盘录入一个整数,查询当前数据在数组中存在的索引。

代码示例:

public class Test3 {
    public static void main(String[] args) {
        //读题拆解法:把一个复杂的题目拆解成很多的小问题,一步一步的去完成
        //读题拆解法
        //1.将 1~ 100 之间的10个随机数存入到数组当中。
        //定义一个长度为10的数组,准备存储数据
        int[] arr = new int[10];
        Random r = new Random();
        for (int i = 0; i < arr.length; i++) {
            //对数组里面的每一个元素进行赋值
            int num = r.nextInt(100) + 1;
            arr[i] = num;
        }


        //2.验证结果
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();

        //3.键盘录入一个整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数");
        int number = sc.nextInt();
        System.out.println("刚刚输入的数字为:" + number);

        //4.定义一个方法获取number在arr数组中的索引
        int index = getIndex(arr,number);

        //5.输出打印
        System.out.println(index);

    }

    //获取number在arr数组中的索引
    public static int getIndex(int[] arr, int number) {
        for (int i = 0; i < arr.length; i++) {
            if(number == arr[i]){
                return i;
            }
        }
        //如果循环结束之后,还没有找到一样,就表示不存在
        //约定的习惯:如果在查找索引时,不存在就返回-1,因为任意的数组都没有-1索引、
        return -1;
    }
}

3.3 练习3随机点名器(掌握)

​ 键盘录入班级人数, 根据班级人数录入班级学员姓名

​ 从录入的学员姓名中, 随机取出一个, 并打印在控制台

代码示例:

public class Test4 {
    public static void main(String[] args) {
        //1.键盘录入班级人数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入班级的人数");
        int count = sc.nextInt();
        //2.根据人数创建数组存姓名
        //我们是根据键盘录入的数据来创建数组的,所以长度为count
        //表示键盘录几,我们就创建一个对应长度的数组
        String[] arr = new String[count];
        //3.键盘录入姓名添加到数组中
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入学生的姓名");
            String name = sc.next();
            //把键盘录入的姓名再添加到数组中
            arr[i] = name;
        }

        //当循环结束之后,就表示所有的姓名都已经存入到数组当中了
        //4.随机抽取
        Random r = new Random();
        //赵杰 李磊 杨晓权 吴沛澈 冯玉波
        // 0    1    2      3     4
        //在随机抽取的时候,可以先抽索引,然后利用索引再获取元素
        int index = r.nextInt(arr.length);
        //5.根据索引获取元素
        String name = arr[index];
        //6.输出打印
        System.out.println(name);
    }
}

3.5 练习4 评委打分(掌握)

需求:

​ 在唱歌比赛中,有6名评委给选手打分,分数范围是[0 - 100]之间的整数。选手的最后得分为:去掉最高分、最低分后的4个评委的平均分,请完成上述过程并计算出选手的得分。

代码示例:

public class Test13 {
    public static void main(String[] args) {
        //1.定义数组存入6个评委的打分
        int[] arr = new int[6];
        //2.生成6个数字,存入数组当中  0~100
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < arr.length; ) {
            System.out.println("请输入第" + (i + 1) + "个评委的打分");
            int score = sc.nextInt();
            if (score >= 0 && score <= 100) {
                //只有当分数在范围之内,才会添加到数组当中
                arr[i] = score;
                //只有添加成功之后,那么索引才会发生变化
                i++;
            } else {
                System.out.println("分数超出范围");
                continue;
            }
        }
        //3.求平均分
        int sum = getSum(arr);
        int max = getMax(arr);
        int min = getMin(arr);
        int avg  = (sum - max - min)/(arr.length - 2);
        System.out.println(avg);
    }

    //1.我要干嘛? --- 求和
    //2.需要什么? --- 数组
    //3.调用处是否需要继续使用结果? 必须返回
    public static int getSum(int[] arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum + arr[i]; //+=
        }
        return sum;
    }

    public static int getMax(int[] arr){
        int max = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > max){
                max = arr[i];
            }
        }
        return max;
    }

    public static int getMin(int[] arr){
        int min = arr[0];
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] < min){
                min = arr[i];
            }
        }
        return min;
    }
}

3.6 练习5 打印形状(掌握)

打印形状其实没有什么特殊的意义,为了锻炼大家循环嵌套的能力

所以只要把课堂的矩形和三角形打印出来就行,其他形状不需要考虑

需求1:打印矩形(掌握)

//目的:
//为了锻炼大家循环嵌套的能力而已

//把在一行打印5个*这件事情,重复了5次
//决定了行数
for (int i = 0; i < 5; i++) {
    //目的:在一行打印5个*
    for (int j = 0; j < 5; j++) {
        System.out.print("*");
    }
    //打印完毕之后,进行换行
    System.out.println();
}

需求2:打印正三角形(掌握)

/*
        *
        **
        ***
        ****
        *****
*/

//把在一行打印5个*这件事情,重复了5次
//决定了行数
for (int i = 1; i <= 5; i++) {
    //目的:在一行打印5个*
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
    }
    //打印完毕之后,进行换行
    System.out.println();
}

//当i = 1 的时候,打印第一行,内循环范围:1~1
//当i = 2 的时候,打印第二行,内循环范围:1~2
//当i = 3 的时候,打印第三行,内循环范围:1~3
//。。。。
//当i = 5 的时候,打印第五行,内循环范围:1~5

3.7 练习6 99乘法表(了解)

分析:

​ 先打印形状,再修改内容

代码示例:

//先打印一个9行9列的矩形
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= 9; j++) {
        System.out.print("*");
    }
    System.out.println();
}

--------------------------------------------------------
//再打印一个直角三角形
//第一行:1个
//第二行:2个
//第三行:3个
//...
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= i; j++) {
        System.out.print("*");
        //默认情况下一个制表符等于4个空格,除此之外还由一个对其的功能
    }
    System.out.println();
}
--------------------------------------------------------
//最后修改内容变成99乘法表
//负责:打印几行
for (int i = 1; i <= 9; i++) {
    //负责:在一行当中打印多少个*
    for (int j = 1; j <= i; j++) {
        System.out.print(j + " * " + i + " = " + (i * j) + "\t");
        //默认情况下一个制表符等于4个空格,除此之外还由一个对其的功能
    }
    System.out.println();
}

3.8 二维数组(了解)

分析:

​ 二维数组:数组里面存的还是其他数组。

静态初始化:

//首先是一个大数组,在大数组里面存了三个小数组。
//大数组的0索引,是第一个小数组
//大数组的1索引,是第二个小数组
//大数组的2索引,是第三个小数组
int[][] arr = {
	{1,2,3,4},
	{5,6,7,8},
	{9,10,11,12}
};

动态初始化:

//第一个方框里面表示大数组的长度
//第二个方框里面表示每一个小数组的长度
int[][] arr = new int[3][5];

获取元素:

int num1 = arr[0][1];
System.out.println(num1);

修改元素:

需求:把10修改为100
arr[2][1] = 100;

遍历二维数组:

//外循环:遍历大数组,得到大数组里面的每一个小数组
for (int i = 0; i < arr.length; i++) {
    //i 表示大数组的索引
    //arr[i] 依次表示每一个小数组
    //内循环:遍历小数组,得到小数组里面的每一个元素
    for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + " ");
    }
    //表示一个小数组已经遍历完毕,所以换行处理
    System.out.println();
}

3.9 练习7 商场营业额(了解)

需求:

​ 一家商场每个季度的销售额如下:单位万元。

​ 一季度:20,30,40

​ 二季度:10,35,42

​ 三季度:21,32,49

​ 四季度:51,45,78

要求:

​ 分别中四个数组将每一个季度的营业额存储,再把4个数组存储到一个大数组中。

求出全年的总销售额

代码示例:

//1,利用静态初始化定义一个二维数组
int[][] arr = {
    {20,30,40},
    {10,35,42},
    {21,32,49},
    {51,45,78}
};

//2.遍历求和
int sum = 0;
//遍历大数组
for (int i = 0; i < arr.length; i++) {
    //i 表示大数组里面的每一个索引
    //arr[i] 大数组里面的每一个小数组
    for (int j = 0; j < arr[i].length; j++) {
        sum = sum + arr[i][j];
    }
}

//3.打印
System.out.println(sum);
posted @ 2022-07-12 08:31  OnlyOnYourself-Lzw  阅读(78)  评论(0)    收藏  举报