- 数组加强练习【掌握】
数组在实际工作及很多底层都有使用到,因此做一个加强练习。
完成以下关于数组相关练习题
1. 统计一个字符在字符数组中第一次出现的下标(直接输出)
2. 统计一个字符在字符数组中出现的次数(直接输出)
3. 已知这样的整型数组 int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 22}; 计算出其中的奇数和以及偶数和
4. 现在有数组 double[] scores = {11, 34, 76, 77, 88, 99, 58, 97, 56};统计并打印出每一个阶段的学生人数(分段方式:0-60; 60-80;80-100)
5. 翻转传入数组中的元素
例如有这样的数组
调用完上面的方法之后,arr中的内容是这样的{'育', '教', '码', '代', '源'};
|
6. 使用嵌套循环打印下面图形
|
7. 移除数组int[] arr = {1, 2, 3, 4, 5, 1, 9, 4, 12, 67, 1};中1这个元素,返回一个新的数组 (不带有1)。即新数组为int[] arr2 = {2, 3, 4, 5, 9, 4, 12, 67};
- 方法
3.1 方法引入【了解】
先来看看,我们之前写的代码:
public class _03Method { public static void main(String[] args) { // 需求1:求1-10的和 int sum = 0; for (int i = 1; i <= 10; i++) { sum += i; } System.out.println("1~10的和:" + sum); // 需求2:求1-100的和 int sum2 = 0; for (int i = 1; i <= 100; i++) { sum2 += i; } System.out.println("1~100的和:" + sum2); // 需求3:求1-100010的和 int sum3 = 0; for (int i = 1; i <= 100010; i++) { sum3 += i; } System.out.println("1~100010的和:" + sum3); } } |
大家可以看到,按照之前的做法,求1-n的和,n不同我们就需要重复写类似的代码,这会导致我们写代码重复,开发效率底下,代码可读性也很差,那么有没有什么方式可以解决这种问题? 用方法解决
先看效果
public class _03Method { public static void main(String[] args) { // 需求1:求1-10的和 _03Method.getSum(10);// 在main方法中调用下面的getSum()方法 // 需求2:求1-100的和 _03Method.getSum(100);// 在main方法中调用下面的getSum()方法 // 需求3:求1-1000的和 _03Method.getSum(1000);// 在main方法中调用下面的getSum()方法 } /** * 求1~n的和 * 复制main方法到当前类中,跟main方法平级的地方 * @param */ public static void getSum(int n) { int sum = 0; for (int i = 1; i <= n; i++) { sum += i; } System.out.println("和:" + sum); } } |
3.2 方法概念和作用【了解】
3.2.1 概念:
方法,也叫函数,但是一般在java中都叫方法,可以看成是一个可以完成独立功能的代码块,可以重复使用,每次使用都是独立的!存在于类的结构体。
3.2.2 作用:
方法可以复用代码,提高效率和程序的可读性。
3.3 方法结构组成【理解】
方法相关术语: 1 修饰符: 作用,决定方法的调用方式。例如,是用类名调用,还是用对象名调用 2 返回值类型:就是返回值的数据类型 最近今天会直接告诉大家,需要不需要返回值 作用:决定在调用方法的时候,是否可以用一个变量接收方法的结果值。 如果返回值类型是void,表示没有任何返回值,不能用变量接收结果值。 返回值:就是处理完业务后的结果反馈。通过关键字 return 返回数据 返回值类型分类: 基本类型:byte/short/int/long/float/double/boolean/char 引用类型:类、抽象类、接口、枚举、数组 void : 表示没有任何返回值 3 方法名: 作用:决定调用哪一个方法(就是用来找到要使用的方法的) 命名原则:见名知意,小驼峰,不能以关键字命名。 4 形参列表: 作用,就是用了接收调用方法的时候,传入的实际参数(值/变量)的 5 方法体: 就是根据实际需求,处理数据的代码
6 方法签名: 同一个类中,只能有一个独一无二的方法签名 方法名+形参列表(参数的顺序、类型和个数),跟形参名字无关 7 形参列表3要素(方法小括号中的):参数的顺序、类型和个数
|
3.4 方法定义【重点】
|
需求:求2个int类型变量的和,并且返回和
1 方法的声明(定义)步骤:(最重要) 1. 复制main方法到当前类中,跟main方法平级的地方 2. 根据需求分析方法的四要素: 1. 返回值类型: 2. 方法名: 3. 形参列表: 4. 方法体: 3. 根据实际需求,修改方法的四要素 案例代码1: public class _04Method { /** * 需求:求2个int类型变量的和,并且返回和 * 方法定义步骤: * 1. 复制main方法到当前类中,跟main方法平级的地方 2. 根据需求分析方法的四要素: 1. 返回值类型:int 2. 方法名:getSum 3. 形参列表:int a, int b 4. 方法体: 将2个参数a和b相加,并且通过关键字return返回 3. 根据实际需求,修改方法的四要素 * @param a int参数 * @param b int参数 */ public static int getSum(int a, int b) { /* // 将2个参数a和b相加 int sum = a + b; // 通过关键字return返回sum return sum; // return是优先级最低的运算,会等所有return右边的计算结束后执行返回 将上面两步合二为一 */ return a + b;// return是优先级最低的运算,会等所有return右边a + b计算结束后执行返回和 } |
3.5 方法调用【重点】
方法的调用语法:【重点】 看调用方法是否有static修饰: 1 有static修饰,用:当前类名.方法名(实参(变量/值)); 2 没有static修饰,用:当前类的对象名.方法名(实参(变量/值)); //这几天都不用 特殊情况: 如果调用方(目前就是指main方法)和被调用方都在同一个类中,且都有或者都没有static修饰,可以简写为:方法名(实参(变量/值)); 注意: 1. 调用方法的时候,传入的参数数量、数据类型、顺序必须和 声明方法的一致 2. static方法中不能直接调用非static修饰的方法,但是非static方法中可以调用static修饰的方法 |
代码如下:【main方法代码跟上面定义的getSum(int a, int b)方法在同一个类中】
public static void main(String[] args) { // 需求:求2个int类型变量的和,并且返回和 // 在main方法中调用下面定义好的方法:getSum(int a, int b) // 求1和2的和 /* * 2 方法的调用:(最重要) 看要调用方法是否有static修饰: 1 有static修饰,用:当前类名.方法名(实参(变量/值)); 2 没有static修饰,用:当前类的对象名.方法名(实参(变量/值)); // 这几天都不用 */ /* * 因为当前getSum方法有static修饰,所以,用当前类_04Method调用。 * 并且因为该方法返回值类型int,所以,可以用一个int变量sum获取方法计算结果。 */ int sum = _04Method.getSum(1, 2); // 打印一下sum System.out.println(sum); // 求3和5的和 int sum2 = _04Method.getSum(3, 5); // 打印一下sum2 System.out.println(sum2); // 求6和9的和 /* * 方法调用特殊情况: 如果调用方(目前就是指main方法)和被调用方都在同一个类中,且都有或者都没有static修饰,可以简写为: 方法名(实参(变量/值)); */ int sum3 = getSum(6, 9); // 打印一下sum3 System.out.println(sum3); } |
需求:输入:泽泽老师,调用方法:welcome
案例2代码:
public class _05Method { public static void main(String[] args) { // 需求:设计一个方法,请输入一个姓名name,输出一句话,格式如下:name,您好,欢迎光临*马会所!祝你玩的愉快!!! // 在main方法中调用下面定义好的方法: // 需求:输入:泽泽老师,调用方法:welcome /* * 2 方法的调用:(最重要) 看要调用方法是否有static修饰: 1 有static修饰,用:当前类名.方法名(实参(变量/值)); 2 没有static修饰,用:当前类的对象名.方法名(实参(变量/值)); // 这几天都不用 */ /* * 因为当前welcome方法有static修饰,所以,用当前类_0Method调用。 * 并且因为该方法没有任何返回值,所以,不能用变量保存方法计算的结果,也不能直接打印方法结构。 */ _05Method.welcome("泽泽老师"); // 输入:菲菲老师,调用方法:welcome _05Method.welcome("菲菲老师"); // 输入:熊熊波波老师,调用方法:welcome welcome("熊熊波波老师");// 当前方法welcome和main方法都在同一个类_05Method中,都有static修饰,可以简写为:方法名(...)调用 } /** * 需求:设计一个方法,请输入一个姓名name,输出一句话,格式如下:name,您好,欢迎光临*马会所!祝你玩的愉快!!! * 1. 方法的声明(定义):(最重要) 1. 复制main方法到当前类中,跟main方法平级的地方 2. 根据需求分析方法的四要素: 1. 返回值类型:void 2. 方法名:welcome 3. 形参列表:String name 4. 方法体:将参数name和字符串",您好,欢迎光临*马会所!祝你玩的愉快!!!"拼接,打印 3. 根据实际需求,修改方法的四要素 */ public static void welcome(String name) { System.out.println(name + ",您好,欢迎光临*马会所!祝你玩的愉快!!!"); } } |
3.6 方法重载overload
3.6.1. 概念:在同一个类中,方法名相同,形参列表不同,就是方法重载
3.6.2. 作用:
1. 可以减少命名冲突
2. 可以减少程序员记忆成本,方便解决了一类问题
3.6.3. 使用:
声明方法的时候,写不同的形参即可。
调用方法的时候,程序会根据参数数量、类型、顺序自动匹配调用的
代码案例:
public class _06MethodOverload { public static void main(String[] args) { // 需求:求2个int类型变量的和,并且返回和 int sum = getSum(1, 2); System.out.println(sum); // 需求:求3个int类型变量的和,并且返回和 int sum2 = getSum(1, 2, 3); System.out.println(sum2); // 需求:求4个int类型变量的和,并且返回和 int sum3 = getSum(1, 2, 3, 4); System.out.println(sum3); } /** * 该方法和下面两个方法是重载方法 * 求2个int类型变量的和,并且返回和 * @param a * @param b * @return */ public static int getSum(int a, int b) { System.out.println("2个参数"); return a + b; } /** * 该方法和另外两个方法是重载方法 * 求3个int类型变量的和,并且返回和 * @param a * @param b * @param c * @return */ public static int getSum(int a, int b, int c) { System.out.println("3个参数....."); return a + b + c; } /** * 该方法和上面两个方法是重载方法 * 求4个int类型变量的和,并且返回和 * @param a * @param b * @param c * @param d * @return */ public static int getSum(int a, int b, int c, int d) { System.out.println("4个参数---------------"); return a + b + c + d; } } |
3.7 方法注意事项
1 方法调用的时候,实参(变量/值) 必须和 形参完全一致(参数类型,类型顺序,参数个数)
2 一个类中,只能有一个独一无二的方法签名
3 返回值类型是void,不能用变量接受,不能放在打印语句中
4 返回值不是void,必须return一个数据,并且数据类型和返回值类型完全一致
5 return的数据,如果在if或者循环语句中,必须保证在条件语句和循环语句不成立的情况下,也有数据的返回