第一章:Debug模式

1.1什么是Debug模式

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

1.2Debug模式操作流程

  • 如何加断点

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

day07笔记 - 图1

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

    • 在代码区域右键Debug执行

day07笔记 - 图2

  • 看哪里

    • 看Debugger窗口

day07笔记 - 图3

  • 看Console窗口

day07笔记 - 图4

  • 点哪里

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

day07笔记 - 图5

  • 如何删除断点

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

day07笔记 - 图6

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

day07笔记 - 图7

1.3 debugder断点调试的细节

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

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

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

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

第二章 编程思维训练

3.1 练习1求和(掌握)

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

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

代码示例:

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

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

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

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

代码示例:

  1. public class Test3 {
  2. public static void main(String[] args) {
  3. //读题拆解法:把一个复杂的题目拆解成很多的小问题,一步一步的去完成
  4. //读题拆解法
  5. //1.将 1~ 100 之间的10个随机数存入到数组当中。
  6. //定义一个长度为10的数组,准备存储数据
  7. int[] arr = new int[10];
  8. Random r = new Random();
  9. for (int i = 0; i < arr.length; i++) {
  10. //对数组里面的每一个元素进行赋值
  11. int num = r.nextInt(100) + 1;
  12. arr[i] = num;
  13. }
  14. //2.验证结果
  15. for (int i = 0; i < arr.length; i++) {
  16. System.out.print(arr[i] + " ");
  17. }
  18. System.out.println();
  19. //3.键盘录入一个整数
  20. Scanner sc = new Scanner(System.in);
  21. System.out.println("请输入一个整数");
  22. int number = sc.nextInt();
  23. System.out.println("刚刚输入的数字为:" + number);
  24. //4.定义一个方法获取number在arr数组中的索引
  25. int index = getIndex(arr,number);
  26. //5.输出打印
  27. System.out.println(index);
  28. }
  29. //获取number在arr数组中的索引
  30. public static int getIndex(int[] arr, int number) {
  31. for (int i = 0; i < arr.length; i++) {
  32. if(number == arr[i]){
  33. return i;
  34. }
  35. }
  36. //如果循环结束之后,还没有找到一样,就表示不存在
  37. //约定的习惯:如果在查找索引时,不存在就返回-1,因为任意的数组都没有-1索引、
  38. return -1;
  39. }
  40. }

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

  1. 键盘录入班级人数, 根据班级人数录入班级学员姓名
  2. 从录入的学员姓名中, 随机取出一个, 并打印在控制台

代码示例:

  1. public class Test4 {
  2. public static void main(String[] args) {
  3. //1.键盘录入班级人数
  4. Scanner sc = new Scanner(System.in);
  5. System.out.println("请输入班级的人数");
  6. int count = sc.nextInt();
  7. //2.根据人数创建数组存姓名
  8. //我们是根据键盘录入的数据来创建数组的,所以长度为count
  9. //表示键盘录几,我们就创建一个对应长度的数组
  10. String[] arr = new String[count];
  11. //3.键盘录入姓名添加到数组中
  12. for (int i = 0; i < arr.length; i++) {
  13. System.out.println("请输入学生的姓名");
  14. String name = sc.next();
  15. //把键盘录入的姓名再添加到数组中
  16. arr[i] = name;
  17. }
  18. //当循环结束之后,就表示所有的姓名都已经存入到数组当中了
  19. //4.随机抽取
  20. Random r = new Random();
  21. //赵杰 李磊 杨晓权 吴沛澈 冯玉波
  22. // 0 1 2 3 4
  23. //在随机抽取的时候,可以先抽索引,然后利用索引再获取元素
  24. int index = r.nextInt(arr.length);
  25. //5.根据索引获取元素
  26. String name = arr[index];
  27. //6.输出打印
  28. System.out.println(name);
  29. }
  30. }

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

需求:

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

代码示例:

  1. public class Test13 {
  2. public static void main(String[] args) {
  3. //1.定义数组存入6个评委的打分
  4. int[] arr = new int[6];
  5. //2.生成6个数字,存入数组当中 0~100
  6. Scanner sc = new Scanner(System.in);
  7. for (int i = 0; i < arr.length; ) {
  8. System.out.println("请输入第" + (i + 1) + "个评委的打分");
  9. int score = sc.nextInt();
  10. if (score >= 0 && score <= 100) {
  11. //只有当分数在范围之内,才会添加到数组当中
  12. arr[i] = score;
  13. //只有添加成功之后,那么索引才会发生变化
  14. i++;
  15. } else {
  16. System.out.println("分数超出范围");
  17. continue;
  18. }
  19. }
  20. //3.求平均分
  21. int sum = getSum(arr);
  22. int max = getMax(arr);
  23. int min = getMin(arr);
  24. int avg = (sum - max - min)/(arr.length - 2);
  25. System.out.println(avg);
  26. }
  27. //1.我要干嘛? --- 求和
  28. //2.需要什么? --- 数组
  29. //3.调用处是否需要继续使用结果? 必须返回
  30. public static int getSum(int[] arr){
  31. int sum = 0;
  32. for (int i = 0; i < arr.length; i++) {
  33. sum = sum + arr[i]; //+=
  34. }
  35. return sum;
  36. }
  37. public static int getMax(int[] arr){
  38. int max = arr[0];
  39. for (int i = 0; i < arr.length; i++) {
  40. if(arr[i] > max){
  41. max = arr[i];
  42. }
  43. }
  44. return max;
  45. }
  46. public static int getMin(int[] arr){
  47. int min = arr[0];
  48. for (int i = 0; i < arr.length; i++) {
  49. if(arr[i] < min){
  50. min = arr[i];
  51. }
  52. }
  53. return min;
  54. }
  55. }

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

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

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

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

  1. //目的:
  2. //为了锻炼大家循环嵌套的能力而已
  3. //把在一行打印5个*这件事情,重复了5次
  4. //决定了行数
  5. for (int i = 0; i < 5; i++) {
  6. //目的:在一行打印5个*
  7. for (int j = 0; j < 5; j++) {
  8. System.out.print("*");
  9. }
  10. //打印完毕之后,进行换行
  11. System.out.println();
  12. }

需求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);