day06【debug、方法参数传递、练习】
今日内容
debug调试
选择语句练习
循环语句练习
数组练习
方法练习
教学目标
能够使用断点调试查看循环求和流程
能够知道方法的参数是基本类型和引用类型的区别
能够完成减肥计划案例
能够完成逢七必过案例
能够完成不死神兔案例
能够完成百钱百鸡案例
能够完成数组中的元素查找
能够完成数组中的元素反转
能够完成评委打分案例
第一章 Debug调试
1.1 什么是Debug模式
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
使用IDEA的断点调试功能,查看程序的运行过程 Debug调试窗口介绍
1.2 Debug模式操作流程
如何加断点
选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可
如何运行加了断点的程序
在代码区域右键Debug执行
看哪里
看Debugger窗口
看Console窗口
点哪里
点Step Into (F7)这个箭头,也可以直接按F7
如何删除断点
选择要删除的断点,单击鼠标左键即可
如果是多个断点,可以每一个再点击一次。也可以一次性全部删除
第二章 方法的参数传递
2.1 参数传递的概念
可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了。这种传递方式,我们称为参数传递。
在这里,定义方法时,参数列表中的变量,我们称为形式参数
调用方法时,传入给方法的数值,我们称为实际参数
2.2 基本数据类型作为方法参数
publicclassDemo01Args{
publicstaticvoidmain(String[]args) {
// 定义变量
inta=10;
intb=20;
System.out.println("a:"+a+",b:"+b);// a:10,b:20
change(a,b);
System.out.println("a:"+a+",b:"+b);// a:10,b:20
}
publicstaticvoidchange(inta,intb) {// a=10,b=20
System.out.println("a:"+a+",b:"+b);// a:10,b:20
a*=10;// a=100;
b*=10;// b=200;
System.out.println("a:"+a+",b:"+b);// a:100,b:200
}
}
注意:形式参数的改变不影响实际参数
2.3 基本数据类型作为方法参数调用图解
2.4 引用数据类型作为方法参数
publicclassDemo02Args{
publicstaticvoidmain(String[]args) {
// 定义数组
int[]arr={10,20};
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println("----------------");
change(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
}
publicstaticvoidchange(int[]arr) {
arr[0]=arr[0]*10;
arr[1]=arr[1]*10;
}
}
注意:引用类型,作为方法参数,形式参数的改变会影响实际参数
2.5 引用数据类型作为方法参数调用图解
第三章 基础练习
3.1 减肥计划if版本
案例需求
输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击 周六:爬山 周日:好好吃一顿
思路
1:键盘录入一个星期数,用一个变量接收2:对星期数进行判断,这里用 if 语句实现3:在对应的语句控制中输出对应的减肥活动
代码实现
publicclassTest01{
publicstaticvoidmain(String[]args) {
//键盘录入一个星期数,用一个变量接收
Scannersc=newScanner(System.in);
System.out.println("请输入一个星期数:");
intweek=sc.nextInt();
//对星期数进行判断,这里用 if 语句实现
if(week<1||week>7) {
System.out.println("你输入的星期数有误");
}elseif(week==1) {
System.out.println("跑步");
}elseif(week==2) {
System.out.println("游泳");
}elseif(week==3) {
System.out.println("慢走");
}elseif(week==4) {
System.out.println("动感单车");
}elseif(week==5) {
System.out.println("拳击");
}elseif(week==6) {
System.out.println("爬山");
}else{
System.out.println("好好吃一顿");
}
}
}
3.2 减肥计划switch版本
案例需求
输入星期数,显示今天的减肥活动 周一:跑步 周二:游泳 周三:慢走 周四:动感单车 周五:拳击 周六:爬山 周日:好好吃一顿
思路
1:键盘录入一个星期数,用一个变量接收2:对星期数进行判断,这里用 switch 语句实现3:在对应的语句控制中输出对应的减肥活动
代码实现
publicclassTest02{
publicstaticvoidmain(String[]args) {
//键盘录入一个星期数,用一个变量接收
Scannersc=newScanner(System.in);
System.out.println("请输入一个星期数:");
intweek=sc.nextInt();
//对星期数进行判断,这里用 switch 语句实现
switch(week) {
case1:
System.out.println("跑步");
break;
case2:
System.out.println("游泳");
break;
case3:
System.out.println("慢走");
break;
case4:
System.out.println("动感单车");
break;
case5:
System.out.println("拳击");
break;
case6:
System.out.println("爬山");
break;
case7:
System.out.println("好好吃一顿");
break;
default:
System.out.println("你输入的星期数有误");
}
}
}
3.3 在排序之后的数组中添加元素,再排序
案例需求
有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:
请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90
代码实现
publicclassTest{
publicstaticvoidmain(String[]args) {
//1.定义长度为10的原数组
int[]arr={12,14,23,45,66,68,70,77,90,91};
//2.定义长度为11的空数组
int[]brr=newint[11];
//3.键盘录入数组
Scannersc=newScanner(System.in);
System.out.println("请输入一个整数数字");
intnum=sc.nextInt();
//4.定义变量代表要插入的位置
intindex=0;
//5.循环遍历原数组
for(inti=0;i<arr.length;i++) {
if(arr[i]<=num) {
//5.1如果元素小于等于要插入的数字,则直接存放
brr[i]=arr[i];
//5.2把i后面的位置记录下来
index=i+1;
}else{
//5.3如果元素大于要插入的数字,则往后一个位置存放
brr[i+1]=arr[i];
}
}
//6.index存储的就是要插入的位置
brr[index]=num;
//7.遍历新数组查看结果
System.out.print("生成的新数组是:");
for(inti=0;i<brr.length;i++) {
System.out.print(brr[i]+" ");
}
}
}
3.4 统计数字在数组中出现的次数
案例需求
键盘录入6个数(录入的时候要先提示”请输入第几个数”),将录入的6个数存储到数组中。统计第一个录入的数字在数组中出现的次数,将统计出来的个数打印到控制台上
代码实现
publicclassTest02{
publicstaticvoidmain(String[]args) {
Scannersc=newScanner(System.in);
int[]arr=newint[6];
intcount=0;
for(inti=0;i<6;i++) {
System.out.println("请输入第"+(i+1)+"个数:");
intnumber=sc.nextInt();
arr[i]=number;
}
for(inti=0;i<arr.length;i++) {
if(arr[i]==arr[0]) {
count++;
}
}
System.out.println("统计出来的个数为:"+count+"个");
}
}
3.5 求数组中奇数的平均值
案例需求
随机生成10个1-10之间的数(包括1和10),将生成的数放到数组中,计算数组中索引为奇数的元素平均值,并将结果打印到控制台上
代码实现:
publicclassTest01{
publicstaticvoidmain(String[]args) {
Randomrd=newRandom();
int[]arr=newint[10];
intcount=0;
intsum=0;
for(inti=0;i<arr.length;i++) {
intnumber=rd.nextInt(10)+1;
arr[i]=number;
}
for(inti=0;i<arr.length;i++) {
if(i%2==1) {
sum+=arr[i];
count++;
}
}
System.out.println("平均值为:"+(sum/count));
}
}
3.6 数组元素求和
案例需求
有这样的一个数组,元素是{68,27,95,88,171,996,51,210}。求出该数组中满足要求的元素和, 要求是:求和的元素个位和十位都不能是7,并且只能是偶数
思路
1:定义一个数组,用静态初始化完成数组元素的初始化2:定义一个求和变量,初始值是03:遍历数组,获取到数组中的每一个元素4:判断该元素是否满足条件,如果满足条件就累加5:输出求和变量的值
代码实现
public class Test06 {
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素的初始化
int[] arr = {68, 27, 95, 88, 171, 996, 51, 210};
//定义一个求和变量,初始值是0
int sum = 0;
//遍历数组,获取到数组中的每一个元素
for(int x=0; x<arr.length; x++) {
//判断该元素是否满足条件,如果满足条件就累加
if(arr[x]%10!=7 && arr[x]/10%10!=7 && arr[x]%2==0) {
sum += arr[x];
}
}
//输出求和变量的值
System.out.println("sum:" + sum);
}
}
3.7 判断两个数组是否相同
案例需求
定义一个方法,用于比较两个数组的内容是否相同
思路
1:定义两个数组,分别使用静态初始化完成数组元素的初始化2:定义一个方法,用于比较两个数组的内容是否相同3:比较两个数组的内容是否相同,按照下面的步骤实现就可以了 首先比较数组长度,如果长度不相同,数组内容肯定不相同,返回false 其次遍历,比较两个数组中的每一个元素,只要有元素不相同,返回false 最后循环遍历结束后,返回true
4:调用方法,用变量接收
5:输出结果
代码实现
public class Test07 {
public static void main(String[] args) {
//定义两个数组,分别使用静态初始化完成数组元素的初始化
int[] arr = {11, 22, 33, 44, 55};
//int[] arr2 = {11, 22, 33, 44, 55};
int[] arr2 = {11, 22, 33, 44, 5};
//调用方法,用变量接收
boolean flag = compare(arr,arr2);
//输出结果
System.out.println(flag);
}
//定义一个方法,用于比较两个数组的内容是否相同
/*
两个明确:
返回值类型:boolean
参数:int[] arr, int[] arr2
*/
public static boolean compare(int[] arr, int[] arr2) {
//首先比较数组长度,如果长度不相同,数组内容肯定不相同,返回false
if(arr.length != arr2.length) {
return false;
}
//其次遍历,比较两个数组中的每一个元素,只要有元素不相同,返回false
for(int x=0; x<arr.length; x++) {
if(arr[x] != arr2[x]) {
return false;
}
}
//最后循环遍历结束后,返回true
return true;
}
}
3.8 查找元素在数组中出现的索引位置
案例需求
已知一个数组 arr = {19, 28, 37, 46, 50}; 键盘录入一个数据,查找该数据在数组中的索引。
并在控制台输出找到的索引值。如果没有查找到,则输出-1
代码实现
public class Demo05 {
public static void main(String[] args) {
int[] arr = {19, 28, 37, 37, 50};
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
method(arr, num);
}
private static void method(int[] arr, int num) {
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]==num){
//index = i;i
System.out.println(i);
index++;
}
//break;
}
if (index==0){
System.out.println(-1);
}
}
}
3.9 数组元素反转
案例需求
已知一个数组 arr = {1, 2, 3, 4, 5}; 用程序实现把数组中的元素值交换, 交换后的数组 arr = {5, 4, 3, 2, 1}; 并在控制台输出交换后的数组元素。
图解
思路
1:定义一个数组,用静态初始化完成数组元素的初始化2:循环遍历数组,这一次初始化语句定义两个索引变量,判断条件是开始索引小于等于结束索引3:变量交换4:遍历数组
代码实现
public class Test09 {
public static void main(String[] args) {
//定义一个数组,用静态初始化完成数组元素的初始化
int[] arr = {1, 2, 3, 4, 5};
//调用反转的方法
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[] arr
*/
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}
3.10 评委打分
案例需求
在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值 (不考虑小数部分)。
思路
1:定义一个数组,用动态初始化完成数组元素的初始化,长度为62:键盘录入评委分数3:由于是6个评委打分,所以,接收评委分数的操作,用循环改进4:定义方法实现获取数组中的最高分(数组最大值),调用方法5:定义方法实现获取数组中的最低分(数组最小值) ,调用方法6:定义方法实现获取数组中的所有元素的和(数组元素求和) ,调用方法7:按照计算规则进行计算得到平均分8:输出平均分
代码实现
public class Test10 {
public static void main(String[] args) {
//定义一个数组,用动态初始化完成数组元素的初始化,长度为6
int[] arr = new int[6];
//键盘录入评委分数
Scanner sc = new Scanner(System.in);
//由于是6个评委打分,所以,接收评委分数的操作,用循环改进
for(int x=0; x<arr.length; x++) {
System.out.println("请输入第" + (x + 1) + "个评委的打分:");
arr[x] = sc.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 getSum(int[] arr) {
int sum = 0;
for(int x=0; x<arr.length; x++) {
sum += arr[x];
}
return sum;
}
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getMin(int[] arr) {
int min = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] < min) {
min = arr[x];
}
}
return min;
}
/*
两个明确:
返回值类型:int
参数:int[] arr
*/
public static int getMax(int[] arr) {
int max = arr[0];
for(int x=1; x<arr.length; x++) {
if(arr[x] > max) {
max = arr[x];
}
}
return max;
}
//遍历数组
public static void printArray(int[] arr) {
System.out.print("[");
for (int x = 0; x < arr.length; x++) {
if (x == arr.length - 1) {
System.out.print(arr[x]);
} else {
System.out.print(arr[x] + ", ");
}
}
System.out.println("]");
}
}