java从入门到精通-day06、【debug、方法参数传递、练习】


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("]");

    }

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容