08-Debug和编程练习
第一章:Debug模式
1.1什么是Debug模式
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
1.2Debug模式操作流程
-
如何加断点
- 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
细节:
在每一个方法的第一行有效语句前面打上断点,而且一个方法,只打一个。
-
如何运行加了断点的程序
- 在代码区域右键Debug执行
-
看哪里
- 看Debugger窗口
- 看Console窗口
-
点哪里
- 点Step Into (F7)这个箭头,也可以直接按F7
-
如何删除断点
- 选择要删除的断点,单击鼠标左键即可
- 如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?