Java笔记_4(数组与方法)

一、数组

1.1、什么是数组

  • 什么是数组呢?
  • 数组指的是一种容器,可以用来存储同种数据类型的多个值

数组容器在存储数据的时候,需要结合隐式转换考虑。

  • 例如:int类型的数组容器( boean byte short int dove)
  • 例如: double类型的数组容器(byte short int long float double )
  • 建议:容器的类型,和存储的数据类型保持一致

1.2、数组的定义和静态初始化

  • 数组的静态初始化
    初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程

完整格式:数据类型[]数组名= new数据类型[]{元素1,元素2,元素3... };

简化格式:数据类型[]数组名={元素1,元素2,元素3...};


1.3、数组的地址值和元素访问

定义一个数组,直接打印该数组拿到的是数组的地址值

  • 解释一下地址值的格式含义[D@776ec8df
  • [:表示当前是一个数组
  • D:表示当前数组里面的元素都是double类型的
  • @:表示一个间隔符号。(固定格式)
  • 776ec8df:才是数组真正的地址值,(十六进制)
  • 平时我们习惯性的会把这个整体叫做数组的地址值。

索引

  • 索引:也叫做下标,角标。
  • 索引的特点:从0开始,逐个+1增长,连续不间断

1.4、数组的遍历

数组遍历

  • 数组遍历:将数组中所有的内容取出来,取出来之后可以(打印,求和,判断…)
  • 注意:遍历指的是取出数据的过程,不要局限的理解为,遍历就是打印!

通过数组.length可以打印直接得出数组的长度,利用for循环就可以遍历数组


1.5、动态初始化和常见问题

  • 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
  • 格式:数据类型[]数组名= new数据类型[数组长度];
  • 范例: int[]arr = new int[3];

数组默认初始化值的规律:

  • 整数类型:默认初始化值0
  • 小数类型:默认初始化值0.0
  • 字符类型:默认初始化值'/u0000'空格
  • 布尔类型:默认初始化值 false
  • 引用数据类型:默认初始化值null

动态初始化和静态初始化的区别

动态初始化:手动指定数组长度,由系统给出默认初始化值。

  • 只明确元素个数,不明确具体数值,推荐使用动态初始化
    • 举例:使用数组容器来存储键盘录入的5个整数。
int[]arr = { ? ? ? ? ?};
int[]arr = new int[5];

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度。

  • 需求中已经明确了要操作的具体数据,直接静态初始化即可。
    • 举例:将全班的学生成绩存入数组中11,22,33
int[]arr = {11,22,33};

1.6、求最值

int []arr = {11,22,33,55,88,66};

int arr[0] = max;

for(int i = 1;i<arr.length;i++){
	if(arr[i]>max){
		max = arr[i];
	}
}
//此时max里的值就是数组的最大值

1.7、遍历数组求和

需求:生成10个1~100之间的随机数存入数组。

  1. 求出所有数据的和
  2. 求所有数据的平均数
  3. 统计有多少个数据比平均值小
int[] arr = new {};
Random r = new Random();
for (int i = 0; i < arr.length; i++) {
	//每循环一次,就会生成一个新的随机数
	int number = r.nextInt( bound: 100) +1;
	//把生成的随机数添加的数组当中
	//数组名[索引]=数据;
	arr[i] = number;
}

// 1)求出所有数据的和//定义求和变量
int sum = 0;
for (int i = 0; i < arr.length; i++) {
	//循环得到每一个元素
	//并把元素累加到sum当中
	sum = sum + arr[i];
}
System.out.println("数组中所有数据的和为:" + sum) ;
//2)求所有数据的平均数
int avg = sum / arr.length;
System.out.println("数组中平均数为:" + avg);

//3)统计有多少个数据比平均值小int count = 0;
for (int i = o; i < arr.length; i++) {
	if(arr[i] < avg){
		count++;
	}
}
//当循环结束之后,就表示我已经找到了所有的比平均数小的数据
System.out.println("在数组中,一共有"+ count +"个数据,比平均数小");

//遍历数组,验证答案
for (int i = 0; i < arr.length; i++) {
	System.out.print(arr[i] +"");
}


1.8、交换数组中的数据

  • 需求:定义一个数组,存入1,2,3,4,5。按照要求交换索引对应的元素。
  • 交换前:1,2,3,4,5
  • 交换后:5,2,3,4,1
int[] arr={1,2,3,4,5};
for(int i =0,j=arr.length-1;i<j;i++,j--){
	int temp =arr[i];
	arr[i]=arr[j];
	arr[j]=temp;
}
for (int i = 0;i<arr.length;i++){
	System.out.print(arr[i]+"");
}

1.9、打乱数组中的数据

需求:定义一个数组,存入1~5。要求打乱数组中所有数据的顺序。

//1.定义数组存储1~5
int[] arr = {12,345};
//2.循环遍历数组,从0索引开始打乱数据的顺序
Random r = new Random();
for (int i = o; i < arr.length; i++) {
	//生成一个随机索引
	int randomIndex = r.nextInt(arr.length);
	//拿着随机索引指向的元素跟i指向的元素进行交换
	int temp = arr[i];
	arr[i] = arr[randomIndex];
	arr[randomIndex] = temp;
}
//当循环结束之后,那么数组中所有的数据已经打乱顺序了
for (int i = 0; i < arr.length; i++){
	System.out.print(arr[i] +"");
}

1.10、数组的内存图

Java内存分配

区域存储内容
方法运行时使用的内存,比如main方法运行,进入方法栈中执行
存储对象或者数组,new来创建的,都存储在堆内存
方法区存储可以运行的class文件
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器给CPU使用,和我们开发无关
  1. 只要是new出来的一定是在堆里面开辟了一个小空间
  2. 如果new了多次,那么在堆里面有多个小空间,每个小空间中都有各自的数据
  3. 当两个数组指向同一个小空间时,其中一个数组对小空间中的值发生了改变,那么其他数组再次访问的时候都是修改之后的结果了。

二、方法

2.1、什么是方法

  • 方法(method)是程序中最小的执行单元
  • 实际开发中,什么时候用到方法?
    • 重复的代码、具有独立功能的代码可以抽取到方法中。
  • 实际开发中,方法有什么好处?
    • 可以提高代码的复用性
    • 可以提高代码的可维护性

2.2、方法的格式

最简单的方法

格式:

public static void 方法名(){
	方法体(就是打包起来的代码);
}

调用

方法名();

带参数的方法
格式:

public static void method(int num1,int num2) {
	int result = num1 + num2;
	System.out.println(result);
}

带返回值方法的定义和调用
格式:

public static 返回值类型 方法名(参数){
	方法体;
	return 返回值;
}

在这里插入图片描述

  1. 什么时候用到有返回值的方法?
    • 在调用处要根据方法的结果,去编写另外一段代码。
  2. 有返回值方法的调用格式
    • 直接调用,赋值调用, 输出调用

方法的完整格式:

public static 返回值类型 方法名(参数){
	方法体;
	return返回值;
}

2.3、方法的重载

  • 在同一个类中,定义了多个同名的方法,这些同名的方法具有同种的功能。
  • 每个方法具有不同的参数类型或参数个数,这些同名的方法,就构成了重载关系
  • 简单记:同一个类中,方法名相同,参数不同的方法。与返回值无关。
    • 参数不同:个数不同、类型不同、顺序不同

2.4、数组遍历

需求: 设计一个方法用于数组遍历,要求遍历的结果是在一行上的。例如:[11,22,33,44,55]

public static void printArr( int[] arr){
	System.out.print("[");
		for (int i = e; i < arr.length; i++) {
			if(i ==arr. length - 1){
				System.out.print(arr[i]);
			}else{
				System.out.print(arr[i] + ",");
			}
		}
	System.out.println( "]");
}

2.5、数组的最大值

需求:设计一个方法求数组的最大值,并将最大值返回

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

2.5、判断是否存在

定义一个方法判断数组中的某一个数是否存在,将结果返回给调用处

public static boolean contains(int[] arr, int number){
	//查89是否存在
	for(int i = e; i < arr.length; i++) {
		if( arr[i] ==number)i
			return trie;
		}
		//什么时候才能断定89,在数字中是不存在的?
		//当数组里面所有的数据全部比较完毕之后,才能断定
	return false;

2.6、拷贝数组

  • 需求:
    • 定义一个方法copyOfRange(int[] arr,int from, int to)
  • 功能:
    • 将数组arr中从索引from(包含from)开始。
    • 到索引to结束(不包含to)的元素复制到新数组中,将新数组返回。
//将数组arr中从索引from(包含from)开始,到索引to结束(不包含to)的元素复制到新数组中
public static int[] copyOfRange(int[] arr,int from,int to){// 3~7
//1.定义数组
	int[ ] newArr = new int[to - from];
//2.把原始数组arr中的from到to上对应的元素,直接拷贝到newArr中
//伪造索引的思想
	int index = 0;
	for (int i = from; i < to; i++) {
//格式:数组名[索引]=数据值;
		newArr[index] = arr[i];
		index++;
	}
//3.把新数组返回
	return newArr;
	}


2.7、方法的内存

  • 基本数据类型:数据值是存储在自己的空间中

    • 特点:赋值给其他变量,也是赋的真实的值。
  • 引用数据类型:数据值是存储在其他空间中,自己空间中存储的是地址值。

    • 特点:赋值给其他变量,赋的地址值。

方法的值传递
传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值