Java基础学习第五节——方法、修饰符、可变参数、数组

方法&数组

课程介绍

    1. 方法 (重点)
    1. 修饰符(重点)
    1. 数组(一维数组(重点) 二维数组(了解))

1方法(函数)

1.1 概念

什么是方法呢?

定义:方法是可以看成是一个独立完成某个功能的一段代码

方法就是一个东西(把一个方法看成是一个成体,它拥有其功能,方法可以反复用)

示列:

写一段代码:完成计算1-10的和

int sum = 0;

for(int i=1;i\<=10;i++){

 sum+=i;

}

同时要求:完成计算1-1000的和

int sum = 0;

for(int i=1;i\<=1000;i++){

   sum+=i;

}

同时又要求:完成计算1-10000的和

int sum = 0;

for(int i=1;i\<=10000;i++){

   sum+=i;

}

同时要求:。。。。。。。。。。

思考:上面的代码,就只有一个数字进行改变了,其他都没变,可以写一个通用的代码吗?我只要用就可以完成所有的求和?

–》用方法可以办到

常见错误
在这里插入图片描述
原因:形参与实参不匹配,我们应该在调用方传递与形参相同的个数与格式

正确写法
在这里插入图片描述
2.2 方法的基本语法与结构

①语法结构:

修饰符 返回值类型 方法名(变量1,变量2){

   方法体

}

在这里插入图片描述

②调用方法的时候,形参必须要与实参一致

③方法签名:方法名+参数列表

④一个类中不能有两个同样的方法签名(注意不是方法名,是方法签名)
在这里插入图片描述
2.3 方法的返回值类型

在这里插入图片描述
在这里插入图片描述
方法何时需要返回一个数据(如果你需要返回就返回)–》目前设计一个方法就要思考一下需不需要返回

列如:计算二个数据的和(希望得到返回值),应该返回

不需要返回的示列:
在这里插入图片描述
注意:

①如果返回值是void类型,内部不需要(也不能)return 一个值
②如果方法返回值是void类型,是不能直接打印与接收的
在这里插入图片描述
③只要返回值类型是一个void,那么不管什么情况都必须返回一个值
在这里插入图片描述
编译器只看结构,不看结果(若if语句成立即可,若不成立呢)
在这里插入图片描述

在这里插入图片描述
For语句也是有判断的,若不满足呢

2.4 方法重载

在同一个类中,名字相同,但是参数列表不同

好处:我们只需要记一个方法add表示可以求多个整数的和
在这里插入图片描述
2.访问修饰符

java的四个关键字:public、protected、default、private(他们决定了紧跟其后被定义的东西可以被谁使用)

在这里插入图片描述

3.数组(一维数组)

为什么要学习数组
在这里插入图片描述
原因:变量只能存储1个值,而我们怎么解决呢?用数组(可以存放多个数据)

3.1 什么是数组

数组:一个数组可以看成是一个容器,它可以存储多个数据

3.2 数组有什么作用–存储数据的

3.3如何使用数组

场景:

现在有一堆数据:各位的年龄19 20 32 11 55 66…

希望使用一个数组存储起来

①数组的创建

申明数组

>   语法: 数组类型[] 数组名; 或者 数组类型 数组名[]
>   示列: int[] ages;//定义一个数组变量

创建数组

>   动态创建方式
>   Int[] ages = new int[5];
>   或者
>   Int[] ages;
>   ages = new int[5]
>   静态创建方式
>   Int[] ages = new int[]{12,33,11};
>   或者
>   Int[] ages = {12,33,11}
>   但是下面是错误的方式
>   Int ages;
>   Ages = {12,33}

②把数据装进去

Int[] ages = new int[5];

ages[0] = 10;//把10放入ages数组中第一个格子

ages[1] = 20;

③使用,把数据取出来

取出数据直接打印

取出数据做运算

取出数据作为实际参数进行传递

4.二维数组[了解]

1.定义几个数组

 int [] a = {11,22,33}; 
 int [] b = {11,22,33,55,66};
  int [] c = {1,3}; 
  数组声明的语法: 数组中元素类型[] 数组名;

2.上面的 a b c分别把它们看成一个整体

a 的类型是:int []

b 的类型是:int []

c 的类型是:int []

3.希望定义一个长度为3的数组,来存储上面的a b c

int [] [] arr = {a,b,c};
 int [] [] arr = new int[] []{a,b,c};

4.1什么是二维数组

上面这个就是二维数组,为什么称之为2维数组?

只是数组中存储元素类型是任意的,包括了数组类型。

思考:上面代码中二维数组arr的length是多少?

4.2二维数组创建

二维数组的动态创建方式

int [] [] array = new int[][];//声明一个二维数组,a中的元素类型 int[] 一共有3个

1.打印a[0]

打印a中的第一个元素(第一个一维数组)

2.修改上面动态创建的二维数组 创建格式

 int [] [] a = new int[3][5]; 

使用for循环可遍历二维数组
在这里插入图片描述
4.3堆栈内存图

在这里插入图片描述
4.4根据指定格式打印数组

设计一个方法,打印传入int一维数组中的所有元素,打印的格式:[11,22,44,55]

  1. 定义一个方法print,方法参数修改为int 数组(变量名为arr)

  2. 方法里 使用 for循环 遍历数组,使用System.out.println打印

  3. main方法里创建一个数组,然后调用方法print方法

  4. 打印结果换行了,但是我们要求打印一行,所以使用System.out.print

  5. 但是我们要求打印用 逗号 分割,所以System.out.print(arr[i]+”,”)

  6. 前后要求还有个 中括号,所以我们加上打印 [ 和 ]

  7. 注意:角标越界的问题

方式1:直接打印
在这里插入图片描述
方式2:使用字符串拼接

上面的方法打印了多次,先把需要打印的内容拼接成一个字符串,拼接完毕之后一次性打印

  1. 修改上面的代码

  2. 打印的内容拼接成字符串,先定义一个字符串str

  3. 修改用str拼接打印结果
    在这里插入图片描述

设计一个方法,不打印数组,而是把打印的结果返回
返回数组的字符串表示形式: [11,22,44,55]

  1. 返回类型修改为String

  2. 在main 方法调用

  3. 用一个字符串变量接收下print的返回结果
    在这里插入图片描述
    4.5排序(了解)


引入
比如双色球彩票开奖号码:
在这里插入图片描述

  • 现在有一个数组:
    在这里插入图片描述

希望写一段代码:执行完毕之后,上面的数组中的数据变成从小到大的排序,怎么写?

  1. 观察手动排序,如果数据量太大,数据值也比较大,就很难去比较大小了

  2. 希望有一个严谨的比较规则:先相邻的两个格子进行比较,把较大的放在靠后的位置

  3. 代码实现

  4. 第一轮比较5次,把最大的数放到最后

//第一次 
if(a[0] \> a[1]){
 int t = a[0]; 
 a[0] = a[1]; 
 a[1] = t;
  } 
//第二次
 if(a[1] \> a[2]){
  int t = a[1]; 
  a[1] = a[2];
   a[2] = t;
    } 
//第三次 
//第四次 
//第五次

优化上面代码,使用for 循环

(第一轮 把最大的数 移动到最后面呢)
在这里插入图片描述
第二轮比较4次,把最大的数放到最后
在这里插入图片描述
第三轮比较3次,把最大的数放到最后
在这里插入图片描述
第四轮比较2次,把最大的数放到最后
在这里插入图片描述
第五轮比较1次,把最大的数放到最后
在这里插入图片描述
优化上面代码,使用嵌套循环

  1. 上面的代码只能排列数组长度为 6 的数组,我们希望是任意数组的长度怎么做

数组变量.length
这就是 冒泡排序
在这里插入图片描述

4.6二分搜索(了解)

示例:查询一个整数在整型数组中第一次出现的位置
11,22,33,44,56,78

  1. 定义一个方法search,循环找到第一次出现的元素索引

  2. 二分查找

前提: 被查找的数组中的元素必须是有序的

  1. 定义一个方法,名字为binarySearch(int ele,int[] src)

  2. 先查找数组中间位置(索引)出的元素和ele比较

  3. 定义三个变量

最小索引 minIndex
最大索引maxIndex
中间索引 (minIndex + maxIndex) / 2

  1. 比较判断确定范围
if( ele < src[midIndex] ){
	 maxIndex = midIndex -1; 
 }else if(ele > src[midIndex]){ 
	 minIndex = midIndex + 1; 
 }else{ 
 	return midIndex;
  }
public static int binarySearch(int ele,int[] src){ 
	int minIndex = 0;//起始索引 
	int maxIndex = src.length-1;//结束索引 
	int midIndex = (minIndex + maxIndex)/2;//中间索引 
	//循环不断缩小搜索区间 
	while(minIndex <= maxIndex){
		if( ele < src[midIndex] ){ 
			maxIndex = midIndex -1;     
		}else if( 
			ele > src[midIndex]){
			minIndex = midIndex + 1;     
			}else{
				return midIndex;
			} 
		midIndex = ( minIndex + maxIndex )/2; 
		} 
	return -1;
}

在这里插入图片描述
在这里插入图片描述
5.增强for循环 foreach

5.1 foreach作用

作用: 主要是用来遍历数组和集合的;
缺点: 没有索引,凡是涉及有索引相关操作还是用普通for循环,

5.2语法结构

>   for(源中元素类型 e : 源 ){
>   直接使用e就可以了
>   }
>   源 : 可以是数组或者集合(Iterable接口的实现类)

在这里插入图片描述
5.3遍历二维数组

在这里插入图片描述
在这里插入图片描述
6.可变参数 int…

1回顾 求两个整数的和,求三个整数的和 这样的方法 ;
在这里插入图片描述
2转变方式 如果求多个整数的和?–使用数组
在这里插入图片描述
3.引入可变参数
在这里插入图片描述
① 一个方法 可以有可变参数和普通参数,但是可变参数必须放到参数列表的最后;

② 一个方法 不能有多个可变参数;

7. 课程总结

7.1 重点

  1. 方法(重中之重)

  2. 数组(一维数组)

  3. foreach

7.2 难点

方法的定义,和返回值(多去看,多去想,多去练)

8.课后练习

1.定义一个方法getMax,接收两个int参数,返回最大的一个数

public int getMax(int a,int b) {
	if(a\>b) {
		return a;
	}else {
		return b;
	}
}

2.定义一个方法,接收三个int参数,返回最小的一个数

public static int getMin(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;
		}
}

3.设计一个求多个整数积的方法

public static int getMore(int...arr) {
	int sum = 1;
	for(int i:arr) {
		sum\*=i;
	}
	return sum;
}

4.设计一个方法,查询并返回一个字符在字符数组中第一次出现的位置

public static int getOne(char a,char...arr) {
	int s = 0;
	for(int i=0;i\<arr.length;i++) {
		if(arr[i]==a) {
			break;
		}else {
			s++;
		}
	}
	return s;
}

5.设计一个方法,统计一个字符在字符数组中出现的次数

public static int getTwo(char a,char...arr) {
	int s = 0;
	for(int i=0;i\<arr.length;i++) {
		if(arr[i]==a) {
			s++;
		}
	}
	return s;
}

6.已知这样的整形数组 int[] arr = {1,2,3,4,5,6,7,8,9,11,12}计算出其中的奇数和

public static int getThree(int...arr) {
	int sum=0;
	for(int i =0;i\<arr.length;i++) {
		if(arr[i]%2==1) {
			sum+=arr[i];
		}
	}
	return sum;
}

7.现在有数组 double[] scores ={11,34,76,77,88,99,58,97,56};定义一个方法统计并打印出每一个阶段学生人数(分段方式:0-60;60-80;80-100)

public static void getFour(double...arr) {
	int a=0;
	int b=0;
	int c=0;
	for(int i=0;i\<arr.length;i++) {
		if(arr[i]\>=80) {
			a++;
		}else if(arr[i]\>=60) {
			b++;
		}else {
			c++;
		}
	}
	System.out.println("0\~60的人有:"+c);
	System.out.println("60\~80的人有:"+b);
	System.out.println("80\~100的人有:"+a);
}

8.设计一个方法,传入一个int的数组,返回该数组中最大的值

public static int getFive(int...arr) {
	int max=0;
	for(int i =0;i\<arr.length-1;i++) {
		max = arr[i];
		if(max\<arr[i+1]) {
			max=arr[i+1];
		}
	}
	return max;
}

9.设计一个方法,传入一个int的数组,返回该数组中最小的值

public static int getSix(int...arr) {
	int min=0;
	for(int i =0;i\<arr.length-1;i++) {
		min = arr[i];
		if(min\>arr[i+1]) {
			min=arr[i+1];
		}
	}
	return min;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值