数组地址转移问题【难点】

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 true4. 30 100 505. 50 100 506. 30 100 0*/
}
问题总结:1. int[] arr1 = new int[20];int[] arr2 = new int[10];arr1 = arr2;arr1[15] ???; 错误的 arr1 和 arr2 执行的空间为同一个数组空间2. int[] arr1 = new int[10];int[] arr2 = new int[10];arr1[0] = 10;arr2[0] = 20;arr2[5] = 100;arr1[0] = arr2[0];arr1[0] ? arr1[5] ?20, 0赋值操作完成的是对于元素直接内容的转换,不涉及数组地址转移3.是否可以展示数组中 arr[0] arr[5]元素的空间首地址不好意思,不能!!!

数组作为方法的参数

还是比葫芦画瓢

public static void main(String[] args) {}/*
(String[] args) String[] args 就是给数组作为方法参数格式,这里main方法需要的参数是一个String 类型的数组格式:public static 返回值类型 方法名(数据类型[] 数组参数名)数组是可以作为方法的返回值【BUT】在我没有演示,讲解数组作为返回值使用的情况下,任何人不得使用数组作为返回值以防万一你遇到一些你想不到的错误!!!
*/

数组作为参数分析过程

/*
a. 在一个int类型数组中,存储的内容是1 ~ 10int[] 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. 方法执行需要参数,如果没有给予对应格式的实际参数,直接报错

保存数据到数组中

/*
需求完成一个方法,给int类型数组保存的元素进行赋值操作,所有元素内容全部赋值为100方法分析:固定格式:public static 不要问返回值类型:void 没有返回值方法名:assignIntArray赋值int类型数组形式参数列表:  int[] arr 这里需要一个int类型数组方法声明:public static void assignIntArray(int[] arr)
*//**
* 传入一个int类型数组,把当前int类型数组中所有的元素全部赋值为100
*
* @param arr int类型数组
*/
public static void assignIntArray(int[] arr) {// 利用循环遍历数组,循环赋值操作for (int i = 0; i < arr.length; i++) {arr[i] = 100;}
}
class Demo3 {public static void main(String[] args) {int[] intArray = new int[10];System.out.print("方法调用之前:");for (int i = 0; i < intArray.length; i++) {System.out.print(intArray[i] + " ");}System.out.println();assignIntArray(intArray);System.out.print("方法调用之后:");for (int i = 0; i < intArray.length; i++) {System.out.print(intArray[i] + " ");}System.out.println();}/*** 传入一个int类型数组,把当前int类型数组中所有的元素全部赋值为100** @param arr int类型数组*/public static void assignIntArray(int[] arr) {// 利用循环遍历数组,循环赋值操作for (int i = 0; i < arr.length; i++) {arr[i] = 100;}}
}

使用A数据,替换指定数组中B数据

/*
需求:使用A数据,替换指定数组中B数据例如:原始数据:int[] arr = {1, 2, 3, 4, 5, 1, 2, 3, 4, 5}替换所有元素值 == 5 ==> 100结果 Resultint[] arr = {1, 2, 3, 4, 100, 1, 2, 3, 4, 100}方法分析:固定格式:public static 不要问返回值类型:void 没有返回值方法名:replace 替换形式参数列表:这里需要三个参数:a. 指定的数组 int[] arrb. A数据 int newNumc. B数据 int oldNum(int[] arr, int oldNum, int newNum);方法声明:public static void replace(int[] arr, int oldNum, int newNum)
*//**
* 使用newNum数据替换指定数组arr中,oldNum数据
*
* @param arr    指定的int类型数据
* @param oldNum 需要被替换的数据,int类型
* @param newNum 替换使用的新数据,int类型
*/
public static void replace(int[] arr, int oldNum, int newNum) {for (int i = 0; i < arr.length; i++) {if (oldNum == arr[i]) {arr[i] = newNum;}}
}
class Demo4 {public static void main(String[] args) {int[] arr = {1, 11, 111, 1111, 11111, 1, 11, 111, 1111, 11111};System.out.print("方法调用之前:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();replace(arr, 11, 22222);System.out.print("方法调用之后:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}/*** 使用newNum数据替换指定数组arr中,oldNum数据** @param arr    指定的int类型数据* @param oldNum 需要被替换的数据,int类型* @param newNum 替换使用的新数据,int类型*/ public static void replace(int[] arr, int oldNum, int newNum) {for (int i = 0; i < arr.length; i++) {if (oldNum == arr[i]) {arr[i] = newNum;}}}
}

逆序数组

/*
需求:存在一个int类型数组,使用方法逆序数组中的元素例如:int[] arr = {1, 2, 3, 4, 5};执行之后{5, 4, 3, 2, 1};方法分析:固定格式:public static 不要问返回值类型:void 方法名:reverse形式参数列表:int[] arr 这里需要一个int类型数组方法声明:public staitc void reverse(int[] arr)
*//**
* 数组逆序
*
* @param arr 需要被逆序的int类型数组
*/
public staitc void reverse(int[] arr) {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;/*前提:{11, 13, 25, 68, 90};1.i = 0;temp = arr[0]; temp ==> 11arr[0] = arr[arr.length - 1 - i]; arr[4] ==> 90 arr[0] = 90arr[arr.length - 1 - i] ==> arr[4] = 11;2 i = 1;temp = arr[1] temp = 13arr[1] = arr[5 - 1 - 1]; arr[1]  = 68 arr[3] = 68arr[3] = temp; arr[3] ==> 13*/}
}
class Demo5 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};System.out.print("方法调用之前:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();reverse(arr);System.out.print("方法调用之后:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}System.out.println();}/*** 数组逆序** @param arr 需要被逆序的int类型数组*/public static void reverse(int[] arr) {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;}}
}

JAV----------数组操作相关推荐

  1. Numpy入门教程:03.数组操作

    背景 什么是 NumPy 呢? NumPy 这个词来源于两个单词 – Numerical和Python.其是一个功能强大的 Python 库,可以帮助程序员轻松地进行数值计算,通常应用于以下场景: 执 ...

  2. python json数据格式数组内元素递增赋值_python深浅复制,类型转换, json操作,数组操作...

    python深浅复制 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷 ...

  3. php 常用数组操作

    php常用的数组操作函数,包括数组的赋值.拆分.合并.计算.添加.删除.查询.判断.排序等 array_combine 功能:用一个数组的值作为新数组的键名,另一个数组的值作为新数组的值 <?p ...

  4. php数组操作之合并相同键名的值,排序,排重,去空值等

    一.前言 数组操作是咱们在编程时候经常遇到的,只是数组函数有点多,用到的时候难免会想不起来.特别是针对多维数组的操作,有的时候用自带的数组函数真的很方便,可以避免多次的foreach循环,这里记录一下 ...

  5. C#字符串及数组操作

    一.一维: int[] numbers = new int[]{1,2,3,4,5,6}; //不定长 int[] numbers = new int[3]{1,2,3};//定长 二.多维 int[ ...

  6. 【C 语言】数组 ( 多维数组操作模型 | 取某个数组元素地址 | 取某个数组元素值 )

    文章目录 一.多维数组操作模型 1.取出某个数组元素地址 2.取出某个数组元素值 总结 一.多维数组操作模型 以 // 声明一个多维数组int array[2][3]; 二维数组为例 ; 1.取出某个 ...

  7. PHP内核探索之变量(4)- 数组操作

    原文:PHP内核探索之变量(4)- 数组操作 上一节(PHP内核探索之变量(3)- hash table),我们已经知道,数组在PHP的底层实际上是HashTable(链接法解决冲突),本文将对最常用 ...

  8. mongoDB的shell数组操作器

    http://www.2cto.com/database/201304/205024.html mongoDB数组操作器 $push会向数组末尾加入一个元素,如果数组不存在,则会创建这个数组. 增加评 ...

  9. 将0移到最后,在原数组操作,并且不能改变源数据顺序(JS编程)

    一.问题描述: 将0移到最后,在原数组操作,并且不能改变源数据顺序. 示例:输入:[2,0,0,1,0,3],  结果:[2,1,3,0,0,0] 二.问题分析与解决: 注意是在原数组上操作,不要进行 ...

  10. Java 常用类库 之 Arrays 数组操作类

    http://www.verejava.com/?id=16993047728690 /**知识点 : Arrays 数组操作类 */ import java.util.Arrays; public ...

最新文章

  1. 【运维学习笔记】生命不息,搞事开始。。。
  2. 推荐一个学算法的 GitHub 项目
  3. 【Android 内存优化】Java 引用类型 ( 强引用 | 软引用 | 弱引用 | 虚引用 )
  4. python logging模块写入中文,文件乱码的解决方法
  5. 2016福州大学软件工程第四次团队作业-系统设计成绩汇总
  6. 暑期训练日志----2018.8.25
  7. 各厂商服务器ESXI最高版本适配情况
  8. 拿来就能用!用爬虫秒抢到孩子心仪的幼儿园 | CSDN 博文精选
  9. Maven项目导入到Eclipse时Build出现the user operation is waiting for building workspace to complete的问题解决
  10. URAL 1001 Reverse root
  11. HTML5 FileAPI读取实例---(一)
  12. 有人30岁转型做Android开发,老罗android开发视频教程
  13. 发力“智能马桶”的小米们,选对了目标群体吗?
  14. 2022年湖南省高职单招(综合素质)考试冲刺试题及答案
  15. github上star42.4K的开源电商平台
  16. 2017.07.23软件更新公告
  17. python新闻评论分析_Python文本数据分析与处理(新闻摘要)
  18. STC15系列单片机外设参考资料
  19. 6套好看的404页面模板源码
  20. 很多人不会画动漫人物眼睛里面的阴影?那今天这个帮到你了!

热门文章

  1. 解决页面怎么模拟手机端屏幕
  2. tushare pro 版本获取股票历史数据
  3. 解决Git克隆代码 the remote end hung up unexpectedly 错误
  4. Pycharm报错:AttributeError: ‘NoneType‘ object has no attribute ‘_gdal‘的解决办法
  5. 乓乓响冲刺港股:年营收2.2亿 核心收入靠给幼儿园供餐
  6. MyBatis知识汇总(第四篇)分页:LIMT(SQL方式),RowBounds(Java对象方式)
  7. 收敛交叉映射(convergent cross mapping,CCM)滥觞、2012年Science论文引言部分:Detecting Causality in Complex Ecosystems
  8. VS中fseek.cpp引发断点——将一个无效参数传递给了将无效参数视为严重错误的函数
  9. 十字隧道工程盾构机穿过马骝洲水道
  10. 关于正月十六工作室更换新LOGO的通知