课前回顾:1. 循环控制语句:break:在switch中表示结束switch语句;在循环中,表示结束循环continue:结束本次循环,进行下一次循环2.死循环:比较永远成立,永远是true3.嵌套循环:先走外层循环,进入到内层循环,内层循环就一直循环,直到内层循环结束,外层循环进行下一次循环,直到外层循环都结束了,循环整体结束4.Random:可以生成随机数使用:a.导包:import java.util.Randomb.创建对象:Random rd = new Random()c.调用方法:nextInt()->在int的取值范围内随机一个数nextDouble()->在0.0 - 1.0之间随机nextInt(int bound)->在0-(bound-1)之间随机一个数5.数组:a.定义:静态初始化:数据类型[] 数组名 = new 数据类型[]{元素1,元素2...}->推荐数据类型 数组名[] = new 数据类型[]{元素1,元素2...}->不推荐简化: 数据类型[] 数组名 = {元素1,元素2}->静态初始化中极力推荐的动态初始化数据类型[] 数组名 = new 数据类型[数组长度]b.获取长度数组名.lengthc.索引:元素在数组中存储的位置从0开始的,最大索引是数组长度-1(数组名.length-1)唯一d.存储元素数组名[索引值] = 值e.获取元素数组名[索引值]数组名[索引值]在等号右边代表获取元素,在等号左边代表的是存储元素arr[0] = arr1[1] -> 将arr1数组的索引1位置上的元素存储到arr数组的0索引上f.遍历数组名.forig.操作数组时容易出现的问题:ArrayIndexOutOfBoundsException(索引越界异常)->操作的索引超出了数组索引范围NullPointerException(空指针异常):->如果引用为null再操作就会出现今日重点:1.会冒泡排序(一级重点)2.方法的四种定义格式以及调用方式(重中之重)3.二维数组(二级重点)
第一章.冒泡排序
数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序的形式进行排序,数组排序的方法很多,我们讲解的是数组的冒泡排序。
排序,都要进行数组 元素大小的比较,再进行位置的交换。冒泡排序法是采用数组中相邻元素进行比较换位。
8.1 冒泡排序图解
![day05[二维数组_方法] - 图1](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqycexinctj617m0ggdgi02.jpg#height=592&id=gD7jW&originHeight=592&originWidth=1570&originalType=binary&status=done&style=none&width=1570)
8.2 代码实现
public class Test01 {public static void main(String[] args) {//定义一个数组int[] arr = {7,6,5,4,3};//第一圈比较,i = 0 i<4 比较了4次for (int i = 0; i < arr.length-1-0; i++) {if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}System.out.println(Arrays.toString(arr));//按照[元素1,元素2]格式打印元素//第二圈比较:i = 0 i<(4-1) 比较了3次for (int i = 0; i < arr.length-1-1; i++) {if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}System.out.println(Arrays.toString(arr));//按照[元素1,元素2]格式打印元素//第三圈比较:i = 0 i<(4-2) 比较了2次for (int i = 0; i < arr.length-1-2; i++) {if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}System.out.println(Arrays.toString(arr));//按照[元素1,元素2]格式打印元素//第四圈比较:i = 0 i<(4-3) 比较了1次for (int i = 0; i < arr.length-1-3; i++) {if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}System.out.println(Arrays.toString(arr));//按照[元素1,元素2]格式打印元素System.out.println("======================================");for (int j = 0; j < arr.length-1; j++) {//外层循环代表的是比较的圈数for (int i = 0; i < arr.length-1-j; i++) {//内层循环代表的是每圈比较的次数,每圈都应该少一次比较if (arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr[i+1];arr[i+1] = temp;}}}System.out.println(Arrays.toString(arr));}}
第二章.二维数组
2.1二维数组的定义格式
1.概述:一个数组中存有多个一维数组2.定义格式:a.动态初始化:数据类型[][] 数组名 = new 数据类型[m][n]->推荐使用数据类型 数组名[][] = new 数据类型[m][n]数据类型[] 数组名[] = new 数据类型[m][n]m:代表的是二维数组的长度(二维数组中有多少个一维数组)n:代表的是每一个一维数组的长度(一维数组中最多有多少个元素)b.静态初始化数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2..}...}简化:数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2..}...}
public class Demo01Array {public static void main(String[] args) {//数据类型[][] 数组名 = new 数据类型[m][n]->推荐使用int[][] arr1 = new int[3][3];//数据类型 数组名[][] = new 数据类型[m][n]int arr2[][] = new int[3][3];//数据类型[] 数组名[] = new 数据类型[m][n]int[] arr3[] = new int[3][3];System.out.println("=====================");//静态初始化String[][] arr4 = {{"孙悟空","白骨精","青牛精"},{"姜子牙","纣王","妲己"},{"刘备","曹操","孙权"},{"宋江","晁盖","卢俊义"}};}}
2.2获取二维数组长度
1.格式:数组名.length
//静态初始化String[][] arr4 = {{"孙悟空","白骨精","青牛精"},{"姜子牙","纣王","妲己"},{"刘备","曹操","孙权"},{"宋江","晁盖","卢俊义"}};System.out.println(arr4.length);System.out.println(arr4[0].length);
2.3获取二维数组中的元素
1.格式:数组名[i][j]i:代表的是一维数组在二维数组中的索引位置j:代表的是元素在一维数组中的索引位置
public class Demo02Array {public static void main(String[] args) {String[][] arr = {{"乔峰","虚竹","段誉"},{"张无忌","张三丰","张翠山"},{"杨过","小龙女","尹志平"}};System.out.println(arr[0][2]);System.out.println(arr[1][0]);System.out.println(arr[2][2]);}}
2.4二维数组中存储元素
1.格式:数组名[i][j] = 元素值i:代表的是一维数组在二维数组中的索引位置j:代表的是元素在一维数组中的索引位置
public class Demo03Array {public static void main(String[] args) {int[][] arr = new int[3][3];//存元素arr[0][0] = 100;arr[0][1] = 200;arr[0][2] = 300;arr[1][0] = 400;arr[1][1] = 500;arr[1][2] = 600;arr[2][0] = 700;arr[2][1] = 800;arr[2][2] = 900;}}
2.5.二维数组的遍历
思想:先将每一个一维数组从二维数组中遍历出来->遍历二维数组然后再将每一个元素从一维数组中遍历出来->遍历一维数组
public class Demo03Array {public static void main(String[] args) {int[][] arr = new int[3][3];//存元素arr[0][0] = 100;arr[0][1] = 200;arr[0][2] = 300;arr[1][0] = 400;arr[1][1] = 500;arr[1][2] = 600;arr[2][0] = 700;arr[2][1] = 800;arr[2][2] = 900;System.out.println("=====================");for (int i = 0; i < arr.length; i++) {//遍历二维数组,将每一个一维数组遍历出来for (int j = 0; j < arr[i].length; j++) {//遍历的每一个一维数组System.out.println(arr[i][j]);}}}}
2.6二维数组内存图
public class Test04 {public static void main(String[] args) {//代表只规定了二维数组的长度,但是没有初始化里面的一维数组,所以默认为nullint[][] arr1 = new int[3][];//相当于在二维数组中的1索引位置上创建了一个存有1 2 3的一维数组arr1[1] = new int[]{1,2,3};//相当于在二维数组中的2索引位置上创建了一个长度为3的一维数组,没有元素arr1[2] = new int[3];//相当于在二维数组中的2索引位置上的一维数组的1索引位置上存放了100arr1[2][1] = 100;}}
![day05[二维数组_方法] - 图2](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqycv7qiuij617q0ia3zm02.jpg#height=658&id=PaZwv&originHeight=658&originWidth=1574&originalType=binary&status=done&style=none&width=1574)
第三章.方法的使用
1.方法介绍以及简单方法定义(无参无返回值)
1.概述:方法就是功能,是拥有功能性代码的代码块所以,将来我们开发时,一个功能就需要定义一个方法2.好处:让代码好维护提高代码的复用性3.通用的方法定义格式:修饰符 返回值类型 方法名(参数){方法体;return 结果}如果一个方法没有返回值,返回值类型写void,方法体中就不用写return 结果如果一个方法有返回值,返回值类型就写具体的数据类型,写return 结果4.从通用定义格式上细分,分出来四种方法定义格式:无参无返回值的方法->最简单有参数无返回值的方法无参数有返回值的方法有参数有返回值的方法5.无参数无返回值的方法定义public static void 方法名(){方法体}调用:在其他方法中:方法名()6.注意事项:a.方法不调用不执行->main方法是jvm调用的b.方法之间不能互相嵌套c.方法的执行顺序只和调用顺序有关系(谁先调用谁先执行)
需求:定义一个方法,实现两个整数相加,将结果输出
public class Demo02Method {public static void main(String[] args) {//方法调用sum();System.out.println("我想要执行");}public static void sum(){int a = 10;int b = 20;int sum = a+b;System.out.println(sum);}}
2.无参数无返回值的方法执行流程
![day05[二维数组_方法] - 图3](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydd354oxj60li0e9wf202.jpg#height=513&id=bJ95o&originHeight=513&originWidth=774&originalType=binary&status=done&style=none&width=774)
public class Demo01Method {public static void main(String[] args) {//调用famer();//调用处cooker();cooker();customer();}//农民伯伯public static void famer(){System.out.println("种菜");System.out.println("浇水");System.out.println("施肥");System.out.println("拔草");System.out.println("收割");}//厨师public static void cooker(){System.out.println("洗菜");System.out.println("切菜");System.out.println("炒菜");System.out.println("尝尝");System.out.println("装盘");}//顾客public static void customer(){System.out.println("洗手");System.out.println("吃菜");}}
3.方法定义各部分解释
修饰符 返回值类型 方法名(参数){方法体;return 结果}1.修饰符:目前先写成public static2.返回值类型:返回值的数据类型(return后面那个结果的数据类型)3.方法名:见名知意即可4.参数:传递到方法内部的数据 数据类型 变量名,数据类型 变量名5.方法体:具体实现此方法(此功能)的具体代码6.return 结果:代表将方法运行的结果返回给调用处(用户)
![day05[二维数组_方法] - 图4](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydeoppv9j60or05nq2w02.jpg#height=203&id=t3bq3&originHeight=203&originWidth=891&originalType=binary&status=done&style=none&width=891)
4.有参数无返回值的方法定义和执行流程
1.格式:public static void 方法名(参数){方法体}2.调用:方法名(参数具体的值)
需求:定义一个方法实现两个整数相加
public class Demo03Method {public static void main(String[] args) {//调用处(用户)sum(1,2);}public static void sum(int a,int b){int sum = a+b;System.out.println(sum);}}
![day05[二维数组_方法] - 图5](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydf7uhbej60h20cmt9502.jpg#height=454&id=pYleE&originHeight=454&originWidth=614&originalType=binary&status=done&style=none&width=614)
5.无参数有返回值定义以及执行流程
1.格式:public static 返回值类型 方法名(){方法体return 结果;}2.注意:结果会返给调用处(用户)3.调用:数据类型 变量名 = 方法名()
需求:定义一个方法,实现两个整数相加,并将结果返回
public class Demo04Method {public static void main(String[] args) {//调用处(用户)int result = sum();//30 推荐使用System.out.println(result);System.out.println("=================");System.out.println(sum());//不推荐}//定义一个方法,实现两个整数相加,并将结果返回public static int sum(){int a = 10;int b = 20;int sum = a+b;return sum;//30}}
![day05[二维数组_方法] - 图6](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydg26vj4j60ly0g20tk02.jpg#height=578&id=I09B4&originHeight=578&originWidth=790&originalType=binary&status=done&style=none&width=790)
6.有参数有返回值定义以及执行流程
1.定义格式:public static 返回值类型 方法名(参数){方法体return 结果;}2.调用数据类型 变量名 = 方法名(具体的值)
定义方法,实现两个整数相加,将结果返回
public class Demo05Method {public static void main(String[] args) {//调用处(用户)int result = sum(10,20);//30 推荐使用System.out.println(result);}//定义一个方法,实现两个整数相加,并将结果返回public static int sum(int a,int b){int sum = a+b;return sum;//30}}
![day05[二维数组_方法] - 图7](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydgit7sxj60ps0drgmi02.jpg#height=495&id=diGoz&originHeight=495&originWidth=928&originalType=binary&status=done&style=none&width=928)
7.形式参数和实际参数区别
形式参数:在定义方法的时候在小括号中定义的参数,此时并没有给值实际参数:在调用方法的时候给参数赋予的实际的值
8.参数和返回值使用的时机
看需求返回值:什么时候用返回值:当调用者需要被调用方法的结果时,被调用的方法就需要将结果return什么时候不用返回值:当调用者不需要被调用方法的结果时,被调用的方法就不需要将结果return参数:什么时候使用参数:1.当定义方法的时候不确定要操作什么数据时,就需要定义参数,等着调用方法的时候给我传递具体的值2.想将一个方法中的数据传递到另外一个方法的时候,也可以通过参数传递
9.变量作为实参使用
需求:定义一个方法,比较两个整数的大小,如果第一个参数比第二个参数大,返回true,否则返回false;方法三要素参数: 要返回值:要方法名:要
public class Demo07Method {public static void main(String[] args) {int i = 10;int j = 20;boolean compare = compare(i, j);System.out.println(compare);}public static boolean compare(int a,int b){//int a = 10;int b = 20if (a>b){return true;}else{return false;}}}
第四章.方法的练习
1.方法练习1(判断奇偶性)
需求:键盘录入一个整数,将整数传递到另外一个方法中,在此方法中判断这个整数的奇偶性如果是偶数,方法返回"偶数" 否则返回"奇数"方法名:要参数:要返回值:要
public class Test01 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int data = sc.nextInt();String result = method(data);System.out.println(result);}public static String method(int n){if (n%2==0){return "偶数";}else {return "奇数";}}}
2.方法练习2(1-100的和)
需求 : 求出1-100的和,并将结果返回方法名:要参数:不要返回值:要
public class Test02 {public static void main(String[] args) {int sum = sum();System.out.println(sum);int i = sum1(100);System.out.println(i);}public static int sum(){int sum = 0;for (int i = 1; i <= 100; i++) {sum+=i;}return sum;}public static int sum1(int n){int sum = 0;for (int i = 1; i <= n; i++) {sum+=i;}return sum;}}
3.方法练习3(不定次数打印)
需求:定义一个方法,给这个方法传几,就让这个方法循环打印几次"我是一个有经验的大数据开发工程师"方法名:要参数 : 要返回值:不要
public class Test03 {public static void main(String[] args) {method(1);}public static void method(int n){for (int i = 0; i < n; i++) {System.out.println("我是一名大数据库开发工程师");}}}
4.方法练习4(遍历数组)
需求:在main方法中定义一个数组,将数组传递到方法中,在此方法中遍历数组
public class Test04 {public static void main(String[] args) {//定义数组int[] arr = {1,2,3,4};method(arr);//0x001}public static void method(int[] arr){//int[] arr1 = arr 0x001for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);}}}
![day05[二维数组_方法] - 图8](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydjwi8awj60zh0hndgg02.jpg#height=635&id=kY8H0&originHeight=635&originWidth=1277&originalType=binary&status=done&style=none&width=1277)
5.方法练习5(求数组最大值)
需求:在main方法中定义数组,传递到另外一个方法中,在此方法中实现获取数组最大值
public class Test05 {public static void main(String[] args) {int[] arr = {4,5,4,5,7,5,3};int result = method(arr);//0x001System.out.println(result);}public static int method(int[] arr) {//0x001//1.定义一个变量max用于拿两个元素之间较大的元素int max = arr[0];//2.遍历数组,将每一个元素获取出来for (int i = 1; i < arr.length; i++) {/*3.循环比较如果max的值小于遍历出来的元素,将较大的元素重新赋值给max*/if (max<arr[i]){max = arr[i];}}//4.直接输出maxreturn max;}}
6.方法练习6(按照指定格式输出数组元素)
需求:1.定义一个数组 int[] arr = {1,2,3,4}2.遍历数组,输出元素按照[1,2,3,4]
public class Test06 {public static void main(String[] args) {int[] arr = {1,2,3,4};method(arr);}public static void method(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {//判断如果i的值变化到最大索引了,证明要输出的是最后一个元素,最后一个元素输出之后,后面直接跟]if (i==arr.length-1){System.out.print(arr[i]+"]");}else{System.out.print(arr[i]+",");}}}}
7.练习7
数组作为返回值返回
public class Test07 {public static void main(String[] args) {int[] arr1 = method();for (int i = 0; i < arr1.length; i++) {System.out.println(arr1[i]);}}public static int[] method(){int a = 10;int b = 20;int sum = a+b;int multiply = a*b;//将sum和multiply同时返回int[] arr = {sum,multiply};return arr;}}
![day05[二维数组_方法] - 图9](http://ww1.sinaimg.cn/large/006bYs0Bgy1gqydspjtonj611r0hqt9j02.jpg#height=638&id=mYgse&originHeight=638&originWidth=1359&originalType=binary&status=done&style=none&width=1359)
总结:如果参数和返回值是基本类型,我们操作的是具体的数据
如果参数和返回值是引用类型,我们操作的是地址值
第五章.方法注意事项终极版
1.方法不调用不执行2.方法之间不能互相嵌套3.方法的执行顺序只和调用顺序有关4.void 和 [return 结果]不能共存void : 代表没有返回值return 结果:将结果返回,然后结束方法但是void 能和 return 共存单纯的有一个return 仅仅代表结束方法5.一个方法中不能连续return多个返回值(if...else除外)6.写代码时,调用方法的时候要看看我们有没有定义此方法(调用方法时要完全匹配:方法名 参数个数 参数类型)
第六章.方法的重载
需求:定义方法,完成2个整数相加,3个整数相加,4个整数相加
public class Test01 {public static void main(String[] args) {sum(1,2);sum(1,2,3);sum(1,2,3,4);}public static void sum(int a,int b){int sum = a+b;System.out.println(sum);}public static void sum(int a,int b,int c){int sum = a+b+c;System.out.println(sum);}public static void sum(int a,int b,int c,int d){int sum = a+b+c+d;System.out.println(sum);}}
1.概述:方法名相同,参数列表不同,叫做方法的重载2.什么时候可以定义重载的方法?功能一样,但是具体实现(细节)不一样3.什么叫参数列表不同?参数个数不同参数类型不同参数类型顺序不同4.判断是否为重载的方法和什么无关:和参数名无关和返回值无关5.总结:想判断方法是否为重载方法,只看方法名和参数列表
public static void open(){}public static void open(int a){}static void open(int a,int b){}public static void open(double a,int b){}public static void open(int a,double b){}public void open(int i,double d){}public static void OPEN(){}public static void open(int i,int j){}
