java初学者第五天笔记

方法

概述

① 具有某个特定功能的代码块

② 于是就将这段代码块使用一个大括号给括起来,然后再给这个大括号前面起个名字;往后如果需要使用这段代码就可以使用这个名字来代替

 方法的好处

① 提高代码的复用性

② 提高代码的封装性

 方法的定义格式

访问修饰词 返回值 方法名 (参数列表){

方法体;

return数据;

}

 格式说明

① 访问修饰词:控制被别人访问的权限,初学阶段都写成 public static(方便对方法的调用)

② 返回值类型:如果有数据返回,那么就需要在此指定返回数据的数据类型,如果没有数据返回给调用者就写成void

③ 方法名:使用小驼峰式命名的一个标识符,一般就是功能代码块的功能名

④ 参数列表:不是一定有,当方法体需要外界数据的时候才有,可以使用参数列表将数据传入到方法的内部,如果是多个数据,各个参数之间使用逗号进行隔开;传入的参数必须声明数据类型

⑤ 方法体:特定功能的代码块

⑥ return语句:如果返回值类型不是void,那就需要返回数据。使用 return 进行数据的返回

 案例:定义一个方法来获取两个整数的和(有返回值类型、没有返回值类型)

public class Method_Demo {
 // 有返回值类型
 public static int method_1(int x,int y){
 return x + y;
 }
 // 无返回值类型
 public static void method_2(int x,int y){
 System.out.println(x + y);
 }
 public static void main(String[] args) {
  }
}
//注意:在无返回值类型方法内部,通常具有输出语句

方法的调用

概述

如果方法只是定义好,不调用的话 该方法不执行

 调用的格式

方法名(实际调用时传入的参数);

注意:如果在方法的定义时,有参数列表;在调用该方法时,就必须传入跟定义时依次对应(个数、类型、顺序)的参数列表;如果子方法定义时,没有定义参数列表,那么在调用该方法时就不允许传入参数。

 方法在不同情况下的调用方式

① 如果该方法没有返回值类型:方法名(参数列表)

② 如果方法有返回值类型:

a. 返回值不进行二次使用,只想打印方法的执行结果:sout(方法名(参数列表))例如:System.out.println(method_1(5,4));

b. 方法的返回值需要多次使用,采用赋值给变量的方式:数据类型 变量 = 方法名(参数列表);例如:int sum = method_1(5,4);

 方法的注意事项

① 不能在方法中定义方法

② 方法在定义时,参数列表必须有数据类型的声明

③ 方法不调用,不执行

④ 可以在方法的内部调用其他的方法,甚至是调用自己(递归)

 方法的内存理解

public class Method_Demo {
 // 有返回值类型
 public static int method_1(int x,int y){
 return x + y;
 }
  public static void main(String[] args) {
 int sum = method_1(5,4);
 System.out.println(sum);
 }
} 

 图示:

 方法的重载

概念

在同一个类中,如果有多个方法,并且这些方法具备的功能差不多,那就可以将这些方法定义成相同的名字,通过定义不同的参数列表来区分方法的不同;这种做法就叫做方法的重载

 作用

没有重载的时候,需要记忆的方法名较多,当使用的时候容易混淆不清;重载之后,所有相似相同功能的方法就只需要记住一个名字即可,在使用的时候,根据自己的需要传入不同参数列表即可;

例如:平时经常使用的 System.out 下的 println() 方法,当我们需要打印内容的时候,不管将要打印什么类型的数据,想到的都是使用该方法;实际在进行打印的时候,直接将数据以参数的形式传入即可。

 方法重载的三要素

① 前提:只能发生在同一个类中

② 重载的方式:

a. 方法名保持一致

b. 方法的参数列表不能一致(个数、类型、顺序,三者满足任意一个即可)

个数:参数列表的数量

类型:参数列表的数据类型

顺序:参数列表的顺序注意:

使用顺序不同这个条件进行方法重载的判断时,不要看参数的名称,要看参数的数据类型

③ 方法的返回值类型跟方法是否在进行重载没有任何关系

 举个例子:定义3个方法,分别计算2个整数、2个浮点数、3个整数的和

 一 : 没有使用方法的重载

public class Method_Demo {
 // 定义求2个整数和的方法
 public static int method_1(int x,int y){
 return x + y;
 } 
// 定义求2个浮点数和的方法
 public static double method_2(double x,double y){
 return x + y;
 }
 // 定义三个整数求和的方法
 public static int method_3(int x,int y,int z){
 return x + y + z;
 }
}

② 使用方法重载进行设计

public class Method_Demo {
 // 定义求2个整数和的方法
 public static int method(int x,int y){
 return x + y;
 }
 // 定义求2个浮点数和的方法
 public static double method(double x,double y){
 return x + y;
 }
 // 定义三个整数求和的方法
 public static int method(int x,int y,int z){
 return x + y + z;
 }
}

数组的定义

概念

① 一种容器,能够同时对同一类型的多个数据进行存储

② 使用数组,可以减少变量的定义和记忆,用一个简单的数组名就可以将数组内所有的数据表示出来

③ 数组内部是一个空间大小一样并且连续的结构

④ 数组在定义的时候必须明确两个内容,一是数组的大小,而是数组的类型;这两个东西一旦确定无法进行修改

 数组的定义方式(两定 大小,类型)

① 静态初始化数组:定义数组的同时,对容器内的元素进行赋值数据类型

【】 数组名 = new 数剧类型【】{元素1,元素2,元素3,元素4,·······};
决定容器大小的是,大括号内具有的元素的个数

静态初始化可以简写为:

数据类型【】 数组名 = {元素1,元素2,元素3,元素4,·······};

② 动态初始化数组:

先声明容器,在程序运行的过程中再将数据放置到容器中数据类型

【】 数组名 = new 数据类型【size】;

决定容器大小的是,size的数值

 数组结构说明

① 数据类型:可以是基本数据类型,也可以是引用数据类型

② 数组名:合法的标识符

③ new:创建对象的关键字,使用new就意味着会在堆内存开辟内存空间

④ 前后的数据类型应保存一致

 案例:定义一个容器,用来存储10个整型的数据

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = new int[10];
 }
}

数组的遍历

① 第一种方式:(如果容器比较小时还成,容器一旦比较大就不太合适)

数组名【索引】;

② 第二种方式: 使用for循环;将数组的索引当做循环的初始化变量,在配合数组名【索引】获取元素的方式来实现

for(int i = 0;i < 数组名.length ; i++){数组名【i】;

}

③ 第三种方式:使用增强的for循环

for(数据类型 变量名 :数组){

变量名

}

④ 普通for循环和增强for循环的区别

a. 普通的for循环初始化变量都是使用 int 类型,因为变量表示的是数组内的索引

b. 增强for循环数据类型应该是数组内元素的数据类型

c. 普通for循环需要使用“数组【索引】”的方式来获取数组,这种方式既可以得到数据,也可以得到数据对应的索引

d. 增强的for循环只能够得到数组内的数据,无法获取数据对应的索引

 数组的最值

① 假设数组内任意的一个元素为最大值(最小值),一般选择第一个元素或者最后一个元素

② 遍历数组,将遍历出来的元素和假设的最值进行比较

③ 当遍历出来的数据比假设的最值大(小),就将遍历出来的数据赋值给假设的最值

 案例:有一个整型数组 int[] arr = {99,5,66,101,8},打印数组内最大的元素

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = {99,5,66,101,8};
 int max = arr[0];// int max = arr[arr.length - 1]
 for(int i = 0;i < arr.length ;i++){
 if(max < arr[i]){
 max = arr[i];
 }
 }
 System.out.println(max);
}
}

指定元素的交换

① 找到指定元素对应的索引

② 定义中间变量(这个变量必须是数组的数据类型)

③ 实现数据的交换

 案例:将数组 int[] arr = {99,5,66,101,8} 中第一个元素与最后一个元素进行交换

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = {99,5,66,101,8};
 int temp = arr[0];// int temp = arr[arr.length - 1]
 arr[0] = arr[arr.length - 1];
 arr[arr.length - 1] = temp;
 System.out.println(Arrays.toString(arr));
 }
}

 对应位置的元素进行交换(取半法)

① 将数组的一半进行遍历

② 将每一次遍历出来的元素,找到需要进行交换的元素进行交换

案例:将数组 int[] arr = {99,5,66,101,8}进行反转

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = {99,5,66,101,8};
 for(int i = 0; i < arr.length/2;i++){
 int temp = arr[i];
 arr[i] = arr[arr.length - 1 - i];
 arr[arr.length - 1 - i] = temp;
 }
 }
}

 数组内元素的查询

查询数组内是否存在某个元素

① 当数组内存在指定的元素,就返回该元素第一次出现时所对应的索引

② 如果不在指定的元素则返回 -1

 思路

① 先进行数组的遍历

② 将遍历出的元素和指定的数据进行比较

③ 如果数据相等,返回当前元素所对应的索引

④ 如果不相等,返回 -1

 案例:查询数组int[] arr = {99,5,66,101,8};中是否包含元素 9

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = {99,5,66,101,8,99};
 boolean flag = true;
 for(int i = 0; i < arr.length;i++){ 
if(arr[i] == 9){
 flag = false;
 System.out.println(i);
 break;
 }
 }
 if(flag){
 System.out.println(-1);
 }
 }
}

冒泡排序

① 进行两两数据的比较,如果第一个数小于第二个数,保持位置不变

② 接着进行第二个和第三个数据的比较,将较大的数据放到后面,依次类推

③ 一趟冒泡排序过后,就会将当前数组内的最大值排序到数组的最后面,重复进行冒泡排序,知道循环结束排序完成

 

 代码实现

public class Method_Demo {
 public static void main(String[] args) {
 int[] arr = {4,78,1,54,8,99,3,66};
 for(int i = 1;i < arr.length;i ++){
 for(int j = 0; j < arr.length - i;j++){
 if( arr[j] > arr[j + 1]){
 int temp = arr[j];
 arr[j] = arr[j + 1];
 arr[j + 1] = temp;
 }
 }
 System.out.println(Arrays.toString(arr));
 }
 }
}

练习:

1. 简述JDK、JRE、JVM三者之间的关系

2. 简述 Java 实现跨平台的原理

3. 简述 Java 程序开发流程

4. 列举 Java 中有哪些基本数据类型,每个类型能表示的范围?

5. Java 中定义变量的方式有哪些?变量的作用是什么?

6. Java 中标识符的组成?标识符的命名规范是什么?

7. 编写程序,对不同车速进行判断,给出警告或者奖励  车速大于100并小于120,提示车辆超速; 车速大于120,给出警告; 车速大于80且小于100,给予奖励。 提示:车速可以使用 Scanner 进行输入

8. 键盘随机录入一个三位数,判断该数是否是水仙花数?如果是则打印该数是水仙花数,否则打印不是水仙花数  提示:水仙花数:一个三位数的个位3次方、十位3次方、百位3次方的和等于它本身

9. 判断三角形是否合法,键盘录入一个三角形的三条边,判断由这三条边能否组成一个三角形,若可以,计算周长,若不可以提示“非法三角形”

10. 从键盘输入三个整数分别存入num1,num2,num3,对他们进行排序,并且从小到大输出

11. 假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后根据下面的规则判定用户是否输赢。 1)如果用户输入的数匹配彩票的实际顺序,奖金10000元。 2)如果用户输入的数匹配彩票的所有数字,但顺序不一致,奖金3000元。 3)如果用户输入的一个数字只满足顺序情况下匹配彩票的一个数字,奖金1000元。 4)如果用户输入的一个数字只满足非顺序情况下匹配彩票的一个数字,奖金500元。 5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。

12. 统计水仙花数的个数,并计算出所有水仙花数的和

13. 打印 1 - 100 之间所有的质数(只能被1和本身整除的数称为质数)

14. 循环录入5个人的年龄,并计算平均年龄,如果录入的数据出现负数或者大于130的数,立即停止,输出“输入有误,请输入0-130的年龄”;

15. 使用for循环实现:根据用户输入的正整数n,求n!,即n!=n*(n-1)*(n-2)*…*1

16. 一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱。要求100元买100只鸡,请给出所有可行的结果?

17. 假设有一张纸厚度为0.0001米,请问将纸对折多少次后高度超过珠穆朗玛峰

18. 有一颗球,从100米的高度开始自由落体运动(不考虑空气阻力),每一次落地后反弹的高度为前一次自由落体时的一半,求第十次落地后球反弹的高度,以及第十次落地时,球的总体移动了多少米?

 答案

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值