1 二维数组就是存放着一维数组的数组。二维数组的元素都是一个一维数组。二维数组的定义:数据类型[][] 数组名称; 推荐 数据类型 数组名称[][]; 数据类型[] 数组名称[];二维数组的初始化:动态初始化:格式:数据类型[][] 数组名称 new 数据类型[m][n]; m:代表二维数组的长度 n:代表一维数组的长度 n可以省略表示不知道一维数组的内容默认是null// {null,null} int[][] arr new int[2][]; // [[ 表示是二维数组 // I 表示是int类型 System.out.println(arr);// [[I5594a1b5 System.out.println(arr[1]);// [I6a5fc7f7 arr[0] new int[]{1,2,3}; arr[1] new int[8];静态初始化:格式:完整格式: 数据类型[][] 数组名称 new 数据类型[][]{{元素1元素2...元素n},{元素1,元素2,...元素n}...{元素1,元素2,...元素n}}; 简便格式:数据类型[][] 数组名称 {{元素1元素2...元素n},{元素1,元素2,...元素n}...{元素1,元素2,...元素n}};// 静态初始化 int[][] arr new int[][]{{1,2,3},{4,5,6},{7,8,9,10,11}}; System.out.println(arr.length); System.out.println(arr[1][2]);// 6 int[][] arr1 {{1,2},{4,5,6},{33,44,55,66,77}}; System.out.println(arr1[2][3]);遍历二维数组:// 定义二维数组 int[][] arr {{1,2,3},{4,5},{6,7,8,9}}; for (int i 0; i arr.length;i){ for (int j 0;j arr[i].length;j){ System.out.println(arr[i][j]); } }2 方法2.1 方法的定义方法本质上就是一个代码块给代码块起名字就是方法名。进去的数据是参数出来的数据是返回值。格式:修饰符 返回值类型 方法名称(参数列表){ 方法体; return 返回值; } 修饰符: 目前先记住是 public static 返回值类型: 经过方法的代码最终返回的结果值的数据类型。 方法名称: 方法的标识符和变量的名称一样。采用驼峰命名。如果只有一个单词全部小写 参数列表:传入方法中的数据类型(相当于变量的数据类型) 方法体:就是方法的具体代码 return: 会立即结束方法并且将最终的结果(返回值)交给方法的调用处。 返回值:方法最终的结果。 注意:方法不能嵌套 方法如果没有调用是不会执行的。2.2 方法的调用格式:方法名(参数名)目前需要在main方法中调用 方法public static void main(String[] args) { // 方法的调用 // 如果方法有返回值会把返回值返回到方法的调用处 int c sum(10,20); System.out.println(c); } // 方法的定义应该在类中方法外 // 定义两个整数的求和方法 public static int sum(int a,int b){ System.out.println(HelloWorld); int result a b; return result; }/code/pre 课堂练习: 定义方法比较两个数字是否相等 // 定义方法比较两个整数是否相等 public static boolean isEqual(int a,int b){ // if (a b){ // return true; // }else { // return false; // } return a b; } 定义方法求三个整数的最大值 // 定义方法求三个整数的最大值 public static int getMax(int a,int b,int c){ if (a b){ if (a c){ return a; }else { return c; } }else { if (b c){ return b; }else { return c; } } } 2.3 void修饰的方法 void代表方法不需要返回值使用void修饰的方法return可以省略 // 定义方法传递一个整数(大于1),在控制台打印1到该数据的值 public static void print(int n){ // 判断n是否大于1 if (n 1){ System.out.println(傻der~); return;// 立即结束方法 } for (int i 1; i lt; n; i) { System.out.println(i); } } // 定义方法打印10次HelloWorld // void表示不需要返回值 方法也可以没有参数 public static void printHelloWorld(){ for (int i 10; i gt; 0; i--) { System.out.println(HelloWorld); } } // 定义方法把所有的水仙花数都打印在控制台 public static void printFlower(){ for (int i 100;i lt; 1000;i){ int ge i % 10; int shi i / 10 % 10; int bai i / 100; if ((ge * ge * ge shi * shi * shi bai * bai * bai) i){ System.out.println(i); } } }/code/pre 2.4 方法的重载 概述 在同一个类中允许存在一个以上的同名方法只要他们的参数个数或者参数类型不同即可。 重载特点: 与返回值类型无关与参数名无关只看方法名和参数列表 重载本质上是只要调用方法的时候能够区分开到底要调用哪一个方法即可。 public static void main(String[] args) { sum(10.0,20); } // 定义一个求和方法 // sum(int,int) public static int sum(int a,int b){ return a b; } // 定义三个整数的求和方法 // sum(double,int) public static void sum(double a,int b){ } public static boolean isEqual(byte a,byte b){ return a b; } public static boolean isEqual(int a,int b){ return a b; }/code/pre 2.5 方法参数传递问题 参数传递概述 可以理解为当我们要调用一个方法时我们会把指定的数值传递给方法的参数这样方法中的参数就拥有了指定的值可以使用该值在方法中运算 这种传递方式就是参数传递 在定义方法时参数列表中的变量我们称之为形式参数简称形参 在调用方法时传入给方法的数值我们称之为实际参数简称实参 如果参数是基本数据类型和String那么形参的改变不会影响实参。 如果参数是引用数据类型(不包含String),那么形参的改变会影响实参 2.6 方法的递归 在本方法执行的时候调用本方法 递归的时候如果方法没有递归出口会出现StackOverflowError栈溢出错误 public static void main(String[] args) { /** * sum(10) 10 9 8 7 6 5 4 3 2 1 * sum(10) 10 sum(9) * 10 9 sum(8) * ... * 10 9 8 7 6 5 4 3 sum(2) * 10 9 8 7 6 5 4 3 2 sum(1) * * */ System.out.println(sum(100)); } // 求 1 - num的和 public static int sum(int num){ // 递归的出口 if (num 1){ return 1; } return num sum(num - 1); }/code/pre 课堂练习: 百钱买百鸡 3文钱可以买1只公鸡2文钱可以买一只母鸡1文钱可以买3只小鸡。用100文钱买100只鸡那么各有公鸡母鸡小鸡多少只 public static void main(String[] args) { // 3文钱可以买1只公鸡2文钱可以买一只母鸡1文钱可以买3只小鸡。用100文钱买100只鸡那么各有公鸡母鸡小鸡多少只 for (int a 0; a 33;a){// 公鸡最多33只 for (int b 0;b 50;b){// 母鸡最多50只 for (int c 0;c 100;c){// 小鸡 if (c % 3 ! 0){ continue;// c必须是3的倍数 } // 计算鸡的总价 int sumPrice 3 * a 2 * b c / 3; if (sumPrice 100 amp;amp; a b c 100){ System.out.println(总共有 a 只公鸡 b 只母鸡 c 只小鸡); } } } } }/code/pre 不死神兔(斐波那契数列) 有一对兔子从出生后第3个月起每个月都生一对兔子小兔子长到第三个月后每个月又生一对兔子假设兔子都不死问第二十月的兔子对数是多少 // 不死神兔 // 定义一个数组,里面存放每个月的兔子的对数 int[] arr new int[20]; arr[0] 1; arr[1] 1; for (int i 2;i arr.length;i){ arr[i] arr[i - 1] arr[i - 2]; } System.out.println(第二十个月的兔子对数是 arr[19]); 递归方式: // 递归方法 求 不死神兔 public static int rabbit(int n){ if (n 3){ return 1; } return rabbit( n - 1) rabbit( n - 2); } 哈诺塔问题: 有三个金刚石塔第一个塔上面从小到大摆着64片黄金圆盘。现在把圆盘按大小顺序重新摆放在最后一个塔上并且规定在小圆盘上不能放大圆盘。在三个塔之间一次只能移动一个圆盘。 要求将64个黄金圆盘最理想的移动轨迹打印在控制台上。