Debug
Debug 概述:程序调试工具。它可以用于查看程序的执行流程。也可以用于追踪程序执行过程来调试程序。
Debug操作流程:Debug调试,又被称为断点调试,断点其实是一个标记,告诉我们从哪里开始查看
① 如何加断点:在行号点击
② 如何运行加了断点的程序: 代码区右键Debug运行
③ 看哪里:查看Debugger窗口(看代码运行过程以及变化),查看console窗口(结果展示)
④ 点哪里: 点Steo Info(F7) 或者F7直接运行,点Stop结束
⑤ 如何删除断点 :再 次在行号点击
案例:减肥计划
需求:输入星期数,显示今天的减肥活动
周一:跑步
周二:游泳
周三:慢走
周四:动感单车
周五: 拳击
周六: 爬山
周日: 好好吃一顿
思路:
① 键盘录入一个星期数,用一个变量接收
② 对星期数进行判断,这里用if语句实现
③ 在对应的语句控制中输出对应的减肥活动
代码实现:
// 使用for循环实现
public static void _main(String[] args) {
// 键盘录入一个星期数,用一个变量接收 _Scanner scanner = _new _Scanner(System._in);
System.out.println(“输入一个星期数”);
int _week = scanner.nextInt();
// 对星期数进行判断,这里用if语句实现 小于1或者(||)大于7 if (week<1 || week>7){
System.out.println(“你输入的星期数有误”);
}else if (week ==1){ System.out.println(“跑步”);
}else if (week ==2){ System.out.println(“游泳”);
}else if (week ==3){ System.out.println(“慢走”);
}else if (week ==4){ System.out.println(“动感单车”);
}else if (week ==5){ System.out.println(“拳击”);
}else if (week ==6){ System.out.println(“爬山”);
}else{ System.out.println(“好好吃一顿”); } }
// 使用switch语句实现
Scanner scanner = new _Scanner(System._in);
// 键盘录入一个星期数,用一个变量接收 . 快捷键导包 使用Alt+Enter
System.out.println(“输入一个星期数”);
int _week = scanner.nextInt();
_switch (week){
case _1: System._out.println(“跑步”);
break;
case _2: System._out.println(“游泳”);
break;
case _3: System._out.println(“慢走”);
break;
case _4: System._out.println(“动感单车”);
break;
case _5: System._out.println(“拳击”);
break;
case _6: System._out.println(“爬山”);
break;
case _7: System._out.println(“好好吃一顿”);
break;
default: System.out.println(“你输入的星期数有误”); }
案例:逢七过
需求: 任意一个数字包含7或者是7的倍数都要说:过,为了帮助大家更好的玩这个游戏,我们直接在控制台打印出1-100之间满足逢七过的数字,这就知道哪些数字要过。
// 1、打印1-100之间的数据,用for循环实现数据的获取 for( _int _i = 0;i<= 100 ; i ++){
// 2、 根据规则使用if语句进行数据得判断,
// 个位数为7(x%10 == 7) 十分数为7(x/10%10== 7) 被7整除(x%7 ==0)
_if (i%10 == 7 || i/10%10== 7 || i% 7 ==0 ){
// 3、输出数据
System.out.println(i);
}
}
案例:不死神兔
需求:有一对兔子,从出生后第三个月起每个月都生一对兔子,小兔子到第三月后又生一对兔子,
假如兔子都不死,问第二十个月的兔子对数为多少?
找规律:
第一个月:1
第二个月:1
第三个月:2
第四个月:3
第五个月:5
斐波那契数列:1,1,2,3,5… 1+1=2, 2+3=5
解释:从第三个数字开始,前两位之和等与后面的第三位数
每一个数据是前两个数据之和,前两个数据是已知数
arr[0]=1;
arr[1]=1;
arr[2]=arr[0] +arr[0] ;
arr[3]=arr[1] +arr[2] ;
…
arr[i]= arr[i-2] + arr[i-1];
代码实现:
// 为了存储多个月的兔子对数,定义一个数组,用动态初始化完成元素的初始化,长度为20
int[] arr = new int[20];
// 因为第一个月和第二个月兔子的对数已知都是1,所以数组的第一个和第二个都是1
_arr[0] = 1;
arr[1] = 1;
// 使用循环实现计算每个月的兔子对数
for (_int _i= 2; i< arr.length;i ++){
arr[i]= arr[i-2] + arr[i-1];
}
// 输出数组中最后一个元素的值,就是第20个月的兔子对数
System._out.println(“第二十个月兔子的对数是:” + arr[19]);
案例:百钱百鸡
需求:《算经》一书中提出的数学问题:鸡翁值一钱五,鸡母值一钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
分析:
1、鸡翁x只 , 鸡母y只,鸡雏z只 :价格 5x+3y+z/3 = 100; 个数 x+y+z=100;
2、单独一只鸡的个数不能超过多少只
0<= x <=20; 0<= y <=33; 0<= z <=100;
使用穷举法就可以罗列出x,y,z的值
思路:
public static void _main(String[] args) {
// ① 第一层循环,用于鸡翁的范围,初始值为i = 0,判断条件是 x <=20 for (int _x = 0 ; x <= 20; x++){
// ② 第二层循环,用于鸡母的范围,初始值为i = 0,判断条件是 y <=33 for (int _y =0; y<=33 ;y++){
// 鸡雏的范围,判断条件是 z =100 -x -y int _z = 100 - x- y;
// 判断表达式 z%3 ==0 和表达式5x + 3y +z/3 =100是否成立 if ( z%3 == 0 && 5x + 3y +z/3 ==100){
System.out.println(x+”,”+y+”,”+z);
}
}
}
}
案例:百钱百鸡
需求:有这样一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和,要求是:求和的元素个位和十位都不能是7,只能是偶数
思路:
public static void _main(String[] args) {
// ① 定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {68,27,95,88,171,996,51,210};
// ② 定义一个求和变量,初始化为0 int sum = 0;
// ③ 遍历数组,获取数组中的每一个元素 for (int _i = 0; i< arr.length; i ++){
// ④ 判断该元素是否满足条件,如果满足条件就累加
// 个位数不为7:arr[x]%10! =7 ; 十位数不为7:arr[x]/10%10! =7 ; 偶数:arr[x]%2 == 0 ; if (arr[i]%10!=7 && arr[i]/10%10 !=7 && arr[i]%2 ==0){
sum += arr[i];
} }
// 输出求和变量的值 System._out.println(“sum”+sum); }
案例:百钱百鸡
需求:设计一个方法,用于比较两个数组的内容是否相同
思路:
public static void _main(String[] args) {
// ① 定义两个数组,分别使用静态初始化完成数组元素的初始化 int[] arr = {68,27,95,88,171,996,51,210};
int[] arr2 = {68,27,95,88,171,996,51,210};
// ④ 调用方法,用变量接收 boolean com = _compare(arr,arr2);
// ⑤ 输出结果 System._out.println(com); }
// ② 定义一个方法,用于比较两个数组的内容是否相同/
定义方法需要有两个明确(返回值类型,参数):
1、返回值类型: boolean
2、参数:int[]arr, int[]arr2
/
// 定义数据类型为Boolean 方法名compare 参数为int[]arr, int[]arr2public static boolean _compare(_int[]arr, int[]arr2){
// ③ 比较两个数组的内容是否相同,按照下面的步骤实现
// 1.比较数组长度,如果长度不相同,数组内容肯定不相同,返回false
// 3.最后循环遍历结束后,返回true if (arr.length != arr2.length){ _return false; }
// 2.如果长度相同,执行遍历 for (_int _i=0; i< arr.length; i++){
// 3.比较两个数组中的每一个元素,只要元素不相同,返回false if (arr[i] != arr2 [i]){
return false; } }
return true; }
案例:查找数据
需求:已知一个数组 arr = {68,27,95,88,171,996,51,210}; 键盘录入一个数据,查找该数据在数组中的索引,并在控制台输出找出的索引值。例如输入68控制台输出对应的索引值[0]
分析:
键盘录入一个数据后,让这个数据和数组中的每一个元素进行比较,如果数据值相等,返回该数据值对应的索引即可。
但是,加入录入要给数组中不存在的数据,这个时候没有任何内容输出,在实际开发中,如果对应的索引值不存在,我们一般都是返回一个负数,经常使用-1来表示。
1、代码实现
public static void _main(String[] args) {
// ① 定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {68,27,95,88,171,996,51,210};
// 调用Scanner方法 Scanner sc = _new _Scanner(System._in);
System.out.println(“请输入要查找的数据:”);
// ② 键盘录入要查找的数据,用一个变量接收
int _number = sc.nextInt();
// ③ 定义一个索引变量,初始值为-1 int _index = -1;
// ④ 遍历数组,获取数组中的每一个元素 for (int _i=0; i< arr.length;i++){
// ⑤ 将录入的数据和数组中的每一个元素进行对比
// 如果值相同,就把该值对应的索引赋值给索引变量,并结束循环 if (arr[i] == number){
index = i;
break;
}
}
// ⑥ 输出索引变量 System._out.println(index); }
2、定义一个方法调用该方法实现
public static void _main(String[] args) {
// ① 定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
// 调用Scanner方法 Scanner sc = _new _Scanner(System._in);
System.out.println(“请输入要查找的数据:”);
int _number = sc.nextInt();
// 调用定义的方法getIndex() int _index = _getIndex(arr,number);
// ⑥ 输出索引变量 System._out.println(index);
}
_/
查找指定的数据在数组中的索引
两个明确:
返回值类型:int
参数:int arr[],int number
/public static int _getIndex(_int[] arr, int _number) {
// ③ 定义一个索引变量,初始值为-1 int _index = -1;
// ④ 遍历数组,获取数组中的每一个元素 for (int _i = 0; i < arr.length; i++) {
// ⑤ 将录入的数据和数组中的每一个元素进行对比
// 如果值相同,就把该值对应的索引赋值给索引变量,并结束循环 if (arr[i] == number) {
index = i;
break;
}
}
// 返回索引 return index; }
案例:反转数据
需求:已知一个数组 arr = {5,9,1,28,7};
交换后的数组 arr = {7,28,1,9,5};
分析:第1个元素和最后一个元素交换
第2个元素和倒数第二个元素交换
第3个元素和倒数第三个元素交换
有一个临时空间进行交换
元素交换:
假如数组开始索引交start ,结束索引交end
int temp =arr[start];
arr[start] =arr[end];
arr[end] =temp;
思路:
_public static void _main(String[] args) {
// ① 定义一个数组,用静态初始化完成数组元素的初始化 int[] arr = {5,9,1,28,7};
// ④ 调用遍历数组方法 reverse(arr);
_printArray(arr); }
// 定义一个新的方法 定义方法有两个明确:返回值类型:void 参数:int[] arr_public static void _reverse(_int[] arr) {
// ② 循环遍历数组,这一次初始化语句定义两个所以变量,
// 初始化定义两个初始化变量中甲能使用 , 隔开。判断条件是否开始索引小于等于结束索引 for(_int _start = 0, end =arr.length-1; start<= end; start++,end —){
// ③ 变量交换 int _temp = arr[start];
arr[start] = arr[end];
arr[end] =temp; } }
// 定义另一个新的方法 定义方法有两个明确:返回值类型:void 参数:int[] arrpublic static void _printArray(_int[] arr) {
System.out.print(“[“);
for (int _i=0; i< arr.length;i++) {
_if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + “, “); } }
System.out.println(“]”); }
案例:评委打分
需求:在编程竞赛中,有6个评委为参赛选手打分,分数为0-100整数分。
选手的最后得分为:去掉一个最高分和一个最低分的4个评分平均值(不考虑小数)
思路:
public static void _main(String[] args) {
// ① 定义一个数组,用动态初始化完成数组元素的初始化,长度为6 int[] arr = new int[6];
// ② 键盘录入评委分数 Scanner scanner= _new _Scanner(System._in);
// System.out.println(“请输入第一个分数: “);
// // 放入动态定义的数组当中
// arr[0] = scanner.nextInt();
// arr[1] =scanner.nextInt();
// arr[2]= scanner.nextInt();
//③ 由于是六个评委打分,所以接收评委分数的操作,用循环改进 for (_int _i =0; i< arr.length;i++){
System._out.println(“请输入第” + ( i+1 )+ “个分数: “);
arr[i] = scanner.nextInt(); }
printArray(arr);
// 调用最大值的方法 int max = _getMax(arr);
// 调用最小值的方法 int min = _getMin(arr);
// 调用所有元素的和的方法 int sum = _getSum(arr);
// ⑦ 按照计算规则进行计算得到平均分 int avg = (sum - max -min) / (arr.length-2);
// ⑧ 输出平均分 _System._out.println(“选手的最终得分: “+avg); }
_// ④ 定义方法实现获取数组中的最高分(数组最大值)
/ 两个明确:
返回值类型: int
参数:int[] arr
/ public static int _getMax(_int[] arr) {
// 定义一个初始化的值,从第一个数开始遍历数组进行比较输出最大数 int max = arr[0];
_for (int _i =1; i< arr.length; i++){
_if (arr[i] > max){
max = arr[i]; } }
return _max; }
// ⑤ 定义另一个方法实现获取最低分(数组最小值)
/ 两个明确:
返回值类型: int
参数:int[] arr
/ public static int _getMin(_int[] arr) {
// 定义一个初始化的值,从第一个数开始遍历数组进行比较输出最小数 int min = arr[0];
_for (int _i =1; i< arr.length; i++){
_if (arr[i] < min){
min = arr[i]; } }
return _min; }
// ⑥ 定义方法实现获取数组中的所有元素的h和(数组元素求和)
/ 两个明确:
返回值类型: int
参数:int[] arr
/ public static int _getSum(_int[] arr) {
int _sum = arr[0];
_for (int _i =0; i< arr.length; i++){
sum += arr[i]; }
_return _sum; }
// 定义方法实现获取数组 public static void _printArray(_int[] arr) {
System.out.print(“[“);
for (int _i=0; i< arr.length;i++) {
_if (i == arr.length - 1) {
System.out.print(arr[i]);
} else {
System.out.print(arr[i] + “, “); } }
System.out.println(“]”); }