数组(三)地址转移和方法内存图解

1.数组地址转移问题

public static void main(String[] args) {
    int[] arr1 = new int[10];
    int[] arr2 = new int[10];
    
    arr1[0] = 10;
    arr2[0] = 20;
    
    System.out.println("arr1[0]:" + arr1[0]);
    System.out.println("arr2[0]:" + arr2[0]);
    
    arr1[5] = 50;
    
    arr2 = arr1;
    
    arr1[0] = 30;
    arr2[0] = 100;
    
    System.out.println("arr1[0]:" + arr1[0]);
    System.out.println("arr2[0]:" + arr2[0]);
    System.out.println("arr2[5]:" + arr2[5]);
    /*
    1. 报错
    2. 30 30 50 
    3. 100 100 50 true
    4. 30 100 50
    5. 50 100 50
    6. 30 100 0
    */
}

在这里插入图片描述
2. 数组作为方法的参数

题目要求:在一个int类型数组中,存储的内容是1 ~ 10 ; int[] arr = {10, 8, 35, 67, 31, 25, 11, 30, 28, 99};使用代码找出,元素 == 30 所在下标位置
题目分析:
找出元素30对应的下标位置
1. 这里需要利用循环遍历数组,查询操作
2. 查询结果不确定,有可能找到,有可能找不到
3. 在查询之前我们假设对应的数据时不存在的
-1 作为保存目标数据的初始值

方法分析:
固定格式:
public static
返回值类型:
void:
没有返回值,功能变成数据找到直接打印,没有返回到方法外,这是一个黑盒
方法。黑盒方法是数据传入之后,没有任何的返回
int:
返回指定元素的下标位置,没有找到返回-1
方法名:
indexOf
获取指定元素对应下标
形式参数列表:
int[] arr:
查询数据的源数组,在哪一个数组中进行查询操作,这里需要一个int类型数组
int find:
指定在数组中查询的元素
(int[] arr, int find)

方法声明:
public static int indexOf(int[] arr, int find)

/**
* 在指定数组arr中,查询指定元素find所在的下标位置,找到返回值大于等于0,没有找到
* 返回-1
*
* @param arr  查询数据的源数据数组,int类型数组
* @param find 指定在数组中查询的数据,也是对应int类型
* @return 找到指定元素,返回值大于等于0,否则返回-1
*/
public static int indexOf(int[] arr, int find) {
    // 假设查询的数据不存在
    int index = -1;
    
    // 遍历整个数组
    for (int i = 0; i < arr.length; i++) {
        // 发现数组中下标为i的元素和find一致,找到内容,保存下标
        if (find == arr[i]) {
            index = i;
            // 终止循环
        	break;
        }
    }
    
    // 返回index中保存的数据
    return index;
}
class Demo2 {
	public static void main(String[] args) {
		int[] array = {10, 8, 35, 67, 31, 25, 11, 30, 28, 99};
		int find = 13;
		
		// 调用的方法需要数组作为方法的参数,
		// 这里传入【数组名】
		int index = indexOf(array, find);
		
		if (index >= 0) {
			System.out.println("index : " + index);
		} else {
			System.out.println("Not Found!");
		}
	}	
	
	/**
	* 在指定数组arr中,查询指定元素find所在的下标位置,找到返回值大于等于0,没有找到
	* 返回-1
	*
	* @param arr  查询数据的源数据数组,int类型数组
	* @param find 指定在数组中查询的数据,也是对应int类型
	* @return 找到指定元素,返回值大于等于0,否则返回-1
	*/
	public static int indexOf(int[] arr, int find) {
		// 假设查询的数据不存在
		int index = -1;
		
		// 遍历整个数组
		for (int i = 0; i < arr.length; i++) {
			// 发现数组中下标为i的元素和find一致,找到内容,保存下标
			if (find == arr[i]) {
				index = i;
				// 终止循环
				break;
			}
		}
		
		// 返回index中保存的数据
		return index;
	}
}

方法运行图
在这里插入图片描述

总结:

  1. 数组作为方法参数的固定格式:
    (数据类型[] 数组参数名)
  2. 数组作为方法的实际参数的固定格式:
    方法名(数组名);
  3. 数组名作为方法的参数,实际传递的是数组空间首地址,就是和数组地址转移问题是一致的
  4. 方法执行需要参数,如果没有给予对应格式的实际参数,直接报错
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值