数组(一维数组和二维数组的初始化及遍历)

落日映苍穹つ 2023-09-24 14:28 183阅读 0赞

一维数组

数组声明

数组的作用:用来存储相同类型的数据
//以int类型数据为案例:数组用来存储int类型数据
1.声明(定义数组)
int[] arr; //定义一个int类型的数组,名字叫arr
int arr2[];
如果数组只声明,没有后续操作,那么这个数组相当于没定义
int[] arr3 = null;//空 辨别:数组赋值为null和什么都没有赋值 不一样的效果

2.创建
arr = new int[4];//给数组开辟了一个长度为4的空间
编译期声明和创建会被合为一句话: int[] arr = new int[4];

数组初始化

数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。

1.静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

eg:
int[] arr = {12,23,45};
int[] arr = new int[]{12,23,45};
注意:
1.new int[3]{12,23,45};—>错误
2.int[] arr ;
arr = {12,23,45}; —->错误

2.动态初始化
数组定义与为数组元素分配空间并赋值的操作分开进行。

eg:
int[] arr ;
arr = new int[3]
arr[0] = 12;
arr[1] = 23;
arr[2] = 45;
3.默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

int[] arr = new int[3]; —-> 数组有默认的初始化值

数组遍历

方式1:普通for循环—-》正向遍历

方式2:增强for循环

方式3:利用普通for循环: 逆向遍历

代码如下:

  1. //将数组中的每个元素进行查看--》数组的遍历:
  2. //方式1:普通for循环---》正向遍历:
  3. for(int i=0;i<=9;i++){
  4. System.out.println("第"+(i+1)+"个学生的成绩为:"+scores[i]);
  5. }
  6. //方式2:增强for循环:
  7. //对scores数组进行遍历,遍历出来每个元素都用int类型的num接收:
  8. int count = 0;
  9. for(int num:scores){
  10. count++;
  11. //每次都将num在控制台输出
  12. System.out.println("第"+count+"个学生的成绩为:"+num);
  13. }
  14. /*
  15. 增强for循环:
  16. 优点:代码简单
  17. 缺点:单纯的增强for循环不能涉及跟索引相关的操作
  18. */
  19. //方式3:利用普通for循环: 逆向遍历:
  20. for(int i=9;i>=0;i--){
  21. System.out.println("第"+(i+1)+"个学生的成绩为:"+scores[i]);
  22. }
  23. }
  24. }

数组复制

当数组进行复制时,会将数组元素复制到新数组之中

cab2d44851b04a658bb34510796caf55.png

82890b7b9c27458d8443dd71c5f8af65.png

原理:

5173cd108ec3466dbe63a5bee687b566.png

代码如下:

  1. import java.util.Arrays;
  2. public class TestArray14{
  3. public static void main(String[] args){
  4. //给一个源数组:
  5. int[] srcArr = {11,22,33,44,55,66,77,88};
  6. //给一个目标数组:
  7. int[] destArr = new int[10];
  8. //复制:
  9. System.arraycopy(srcArr,1,destArr,3,3);
  10. //遍历查看目标数组:
  11. System.out.println(Arrays.toString(destArr));
  12. }
  13. }

运行结果:

beb4fa98c5db47278de725898019897d.png

数组最值问题

eg:求数组中的最大值

  1. public static int getMaxNum(int[] arr){
  2. //先找一个数上擂台,假定认为这个数最大:
  3. int maxNum = arr[0];
  4. for(int i=0;i<arr.length;i++){
  5. if(arr[i]>maxNum){
  6. maxNum = arr[i];
  7. }
  8. }
  9. return maxNum;
  10. }

数组中参数传递:

方法的实参传递给形参的时候一定要注意:一切都是值传递:
如果是基本数据类型,那么传递的就是字面值
如果是引用数据类型,那么传递的就是地址值

数组查询问题

  1. public class TestArray06{
  2. public static void main(String[] args){
  3. //查询指定元素的位置--》找出元素对应的索引
  4. //给定一个数组:
  5. int[] arr = {12,34,56,7,3,56};
  6. // 0 1 2 3 4 5
  7. //功能:查询元素888对应的索引:
  8. //调用方法:
  9. int index = getIndex(arr,999);
  10. //后续对index的值进行判断:
  11. if(index!=-1){
  12. System.out.println("元素对应的索引:"+index);
  13. }else{//index==-1
  14. System.out.println("查无次数!");
  15. }
  16. }
  17. /*
  18. 定义一个方法:查询数组中指定的元素对应的索引:
  19. 不确定因素:哪个数组,哪个指定元素 (形参)
  20. 返回值:索引
  21. */
  22. public static int getIndex(int[] arr,int ele){
  23. int index = -1; //这个初始值只要不是数组的索引即可
  24. for(int i=0;i<arr.length;i++){
  25. if(arr[i]==ele){
  26. index = i;//只要找到了元素,那么index就变成为i
  27. break;//只要找到这个元素,循环就停止
  28. }
  29. }
  30. return index;
  31. }
  32. }

在指定位置增加元素

  1. import java.util.Scanner;
  2. public class TestArray07{
  3. public static void main(String[] args){
  4. //功能:给定一个数组,在数组下标为2的位置上添加一个元素91
  5. //1.给定一个数组:
  6. int[] arr = {12,34,56,7,3,10,55,66,77,88,999,89};
  7. // 0 1 2 3 4 5
  8. //2.输出增加元素前的数组:
  9. /*
  10. System.out.print("增加元素前的数组:");
  11. for(int i=0;i<arr.length;i++){
  12. if(i!=arr.length-1){
  13. System.out.print(arr[i]+",");
  14. }else{//i==arr.length-1 最后一个元素不用加,
  15. System.out.print(arr[i]);
  16. }
  17. }
  18. */
  19. //从键盘接收数据:
  20. Scanner sc = new Scanner(System.in);
  21. System.out.println("请录入你要添加元素的指定下标:");
  22. int index = sc.nextInt();
  23. System.out.println("请录入你要添加的元素:");
  24. int ele = sc.nextInt();
  25. //3.增加元素
  26. //调用方法:
  27. insertEle(arr,index,ele);
  28. //4.输出增加元素后的数组:
  29. System.out.print("\n增加元素后的数组:");
  30. for(int i=0;i<arr.length;i++){
  31. if(i!=arr.length-1){
  32. System.out.print(arr[i]+",");
  33. }else{//i==arr.length-1 最后一个元素不用加,
  34. System.out.print(arr[i]);
  35. }
  36. }
  37. }
  38. /*
  39. 提取一个添加元素的方法:
  40. 在数组的指定位置上添加一个指定的元素。
  41. 在哪个数组的哪个位置添加哪个元素!
  42. 不确定因素:形参:哪个数组,哪个位置,哪个元素
  43. 返回值:无
  44. */
  45. public static void insertEle(int[] arr,int index,int ele){
  46. for(int i=arr.length-1;i>=(index+1);i--){
  47. arr[i] = arr[i-1];
  48. }
  49. arr[index] = ele;
  50. }
  51. }

在指定位置删除元素

  1. import java.util.Arrays;
  2. public class TestArray09{
  3. public static void main(String[] args){
  4. //功能:给定一个数组,删除元素3:
  5. //1.给定一个数组:
  6. int[] arr = {12,34,56,7,3,10,34,45,56,7,666};
  7. //2.输出删除前的数组:
  8. System.out.println("删除元素前的数组:"+Arrays.toString(arr));
  9. //找到要删除的元素对应的索引即可:
  10. int index = -1 ;
  11. for(int i=0;i<arr.length;i++){
  12. if(arr[i]==1200){
  13. index = i;
  14. break;
  15. }
  16. }
  17. //3.删除
  18. if(index!=-1){
  19. for(int i=index;i<=arr.length-2;i++){
  20. arr[i] = arr[i+1];
  21. }
  22. arr[arr.length-1] = 0;
  23. }else{//index==-1
  24. System.out.println("根本没有你要删除的元素!");
  25. }
  26. //4.输出删除后的数组:
  27. System.out.println("删除元素后的数组:"+Arrays.toString(arr));
  28. }
  29. }

Arrays工具类

  1. 为了方便我们对数组进行操作,系统提供一个类Arrays,我们将它当做工具类来使用。
  2. import java.util.Arrays;
  3. public class TestArray13{
  4. public static void main(String[] args){
  5. //给定一个数组:
  6. int[] arr = {1,3,7,2,4,8};
  7. //toString:对数组进行遍历查看的,返回的是一个字符串,这个字符串比较好看
  8. System.out.println(Arrays.toString(arr));
  9. //binarySearch:二分法查找:找出指定数组中的指定元素对应的索引:
  10. //这个方法的使用前提:一定要查看的是一个有序的数组:
  11. //sort:排序 -->升序
  12. Arrays.sort(arr);
  13. System.out.println(Arrays.toString(arr));
  14. System.out.println(Arrays.binarySearch(arr,4));
  15. int[] arr2 = {1,3,7,2,4,8};
  16. //copyOf:完成数组的复制:
  17. int[] newArr = Arrays.copyOf(arr2,4);
  18. System.out.println(Arrays.toString(newArr));
  19. //copyOfRange:区间复制:
  20. int[] newArr2 = Arrays.copyOfRange(arr2,1,4);//[1,4)-->1,2,3位置
  21. System.out.println(Arrays.toString(newArr2));
  22. //equals:比较两个数组的值是否一样:
  23. int[] arr3 = {1,3,7,2,4,8};
  24. int[] arr4 = {1,3,7,2,4,8};
  25. System.out.println(Arrays.equals(arr3,arr4));//true
  26. System.out.println(arr3==arr4);//false ==比较左右两侧的值是否相等,比较的是左右的地址值,返回结果一定是false
  27. //fill:数组的填充:
  28. int[] arr5 = {1,3,7,2,4,8};
  29. Arrays.fill(arr5,10);
  30. System.out.println(Arrays.toString(arr5));
  31. }
  32. }

二维数组

基本定义

  1. public class TestArray15{
  2. public static void main(String[] args){
  3. //定义一个二维数组:
  4. int[][] arr = new int[3][];//本质上定义了一个一维数组,长度为3
  5. int[] a1 = {1,2,3};
  6. arr[0] = a1;
  7. arr[1] = new int[]{4,5,6,7};
  8. arr[2] = new int[]{9,10};
  9. }
  10. }

数组初始化

数组的初始化方式总共有三种:静态初始化、动态初始化、默认初始化。

  1. eg:
  2. int[][] arr = {
  3. {1,2},{4,5,6},{4,5,6,7,8,9,9}};
  4. int[][] arr =new int[][] {
  5. {1,2},{4,5,6},{4,5,6,7,8,9,9}};
  6. 动态初始化
  7. 数组定义与为数组元素分配空间并赋值的操作分开进行。
  8. eg:
  9. int[][] arr = new int[3][]; //本质上定义了一维数组长度为3,每个“格子”中放入的是一个数组
  10. arr[0] = new int[]{1,2};
  11. arr[1] = new int[]{3,4,5,6};
  12. arr[2] = new int[]{34,45,56};
  13. eg:
  14. int[][] arr = new int[3][2];
  15. public class TestArray16{
  16. public static void main(String[] args){
  17. int[][] arr = new int[3][2];
  18. //本质上:定义一维数组,长度为3,每个数组“格子”中,有一个默认的长度为2的数组:
  19. arr[1] = new int[]{1,2,3,4};
  20. //数组遍历:
  21. for(int[] a:arr){
  22. for(int num:a){
  23. System.out.print(num+"\t");
  24. }
  25. System.out.println();
  26. }
  27. }
  28. }

静态初始化
除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。
默认初始化
数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

数组遍历

四种遍历方式

  1. public class TestArray15{
  2. public static void main(String[] args){
  3. //定义一个二维数组:
  4. int[][] arr = new int[3][];//本质上定义了一个一维数组,长度为3
  5. int[] a1 = {1,2,3};
  6. arr[0] = a1;
  7. arr[1] = new int[]{4,5,6,7};
  8. arr[2] = new int[]{9,10};
  9. //读取6这个元素:
  10. //System.out.println(arr[1][2]);
  11. //对二维数组遍历:
  12. //方式1:外层普通for循环+内层普通for循环:
  13. for(int i=0;i<arr.length;i++){
  14. for(int j=0;j<arr[i].length;j++){
  15. System.out.print(arr[i][j]+"\t");
  16. }
  17. System.out.println();
  18. }
  19. //方式2:外层普通for循环+内层增强for循环:
  20. for(int i=0;i<arr.length;i++){
  21. for(int num:arr[i]){
  22. System.out.print(num+"\t");
  23. }
  24. System.out.println();
  25. }
  26. //方式3:外层增强for循环+内层增强for循环:
  27. for(int[] a:arr){
  28. for(int num:a){
  29. System.out.print(num+"\t");
  30. }
  31. System.out.println();
  32. }
  33. //方式4:外层增强for循环+内层普通for循环:
  34. for(int[] a:arr){
  35. for(int i=0;i<a.length;i++){
  36. System.out.print(a[i]+"\t");
  37. }
  38. System.out.println();
  39. }
  40. }
  41. }

#

发表评论

表情:
评论列表 (有 0 条评论,183人围观)

还没有评论,来说两句吧...

相关阅读

    相关 初始化

           这里主要写一些二维数组的简单总结,我对二维数组的理解是:“数组里面套数组”;对比一下一维数组,一维数组中的元素是基本类型的数值或者是引用,那么二维数组的元素即为一

    相关

    java二维数组和C语言二数组的理解是相同的,即都可以看成是矩阵。 下面程序是对二维数组的遍历过程: 【方法一】:录入和输出基本相同,第一层for循环控制行数的变化;第二层