数组

数组:是多个相同类型的数据按照一定顺序排列的集合,并使用一个名字命名,并通过标号的方式对这些数据统一管理。

特点:

  1. 创建数组对象,会在内存中开辟一块连续的存储空间

  2. 数组长度一旦确定,就不能修改

  3. 数组本身是引用数据类型,数组元素可以是基本数据类型,也可以是引用数据类型。

  4. 数组是有序排列的。

一维数组

  • 一维数组的声明和初始化

    //静态初始化(数组初始化与元素赋值同时进行)
    int[] ids;
    ids = new int[] {1001,1002,1003};
    //动态初始化(数组初始化与元素赋值分开进行)
    String[] names = new String[2];

    int arr = {1,2,3,4};//类型推断,正确
    //int arr1;
    //arr1 = {3,4,5}; 错误
  • 获取数组的指定位置的元素

    names[0] = "";
    names[1] = "";
  • 数组的长度

    int len = names.length;
  • 遍历数组

    for(int i = 0  ; i < names.length ; i++){
    System.out.println(names[i]);    
    }
  • 元素的默认值

    数组元素为整型:0

    数组元素为浮点型:0.0

    数组元素为字符型:0或'\u0000'

    数组元素为boolean型:false

    数组元素为引用数据类型:null

  • 内存解析

 

 

多维数组

  • 二维数组的声明和初始化

    //静态初始化(数组初始化与元素赋值同时进行)
    int[][] ids;
    ids = new int[][] {{1,2,3},{2,3},{4,5}};
    //动态初始化(数组初始化与元素赋值分开进行)
    String[][] names = new String[2][3];
    String[][] names = new String[2][];
  • 获取数组的指定位置的元素

    names[0][1];

    int[][] arr = new int[3][];
    System.out.println(arr[0][1]);//空指针异常
    arr[1] = new int[3];
  • 数组的长度

    int len = names.length;
  • 遍历数组

    for(int i = 0  ; i < arr.length ; i++){
       for (int j = 0 j < arr[i].length ;j++) {
           System.out.println(names[i][j]);
      }    
    }
  • 元素的默认值

    //方式一
    int arr[][] = new int[2][3];
    System.out.println(arr);//[[I@34d5678
    System.out.println(arr[0]);//地址值[I@15d9742
    System.out.println(arr[0][0]);//0
    //方式二
    int arr1[][] = new int[3][];
    System.out.println(arr1[0]);//null
    System.out.println(arr1[0][0]);//空指针异常
  • 内存解析

 

 

练习:

 //使用二维数组打印一个10行的杨辉三角
       int[][] arr = new int[10][];
       for(int i = 0 ; i < arr.length ; i++){//行
            arr[i] = new int[i+1];
           for(int j = 0 ; j <= i ;j++){//列
               if(j != 0 && j != i){
                   arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
              }else {
                   arr[i][j] = 1;
              }
          }
      }

       for (int i = 0 ; i < arr.length ;i++){
           for(int j = 0 ; j < arr[i].length ;j++){
               System.out.print(arr[i][j]+"\t");
          }
           System.out.println();
      }
//创建一个长度为6的数组,值为1-30之间的随机数,且各不相同
//方法一
       int[] arr = new int[6];
       arr[0] = (int)(Math.random()*30)+1;
       System.out.println(arr[0]);
       for(int i = 1 ; i < arr.length; i++){//数组中每一个数赋值
           lable: while(true) {
               arr[i] = (int)(Math.random()*30)+1;
               int count = 0;
               for (int j = 0; j < i ; j++) {//需要比较和之前的数做比较
                  if(arr[i] != arr[j]){
                      count++;
                  }
              }
               if(count == i){
                   System.out.println(arr[i]);
                   break lable;
              }
          }
      }
//方法二
 int[] arr = new int[6];
       for(int i = 0 ; i < arr.length; i++){
           arr[i] = (int)(Math.random()*30)+1;
           for(int j = 0 ;j < i;j++){
               if(arr[i] == arr[j]){
                   i--;
                   break;
              }
          }
      }

 

posted @   清水煮岁月  阅读(360)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示