Java 基本语法----数组

本文详细介绍了Java中的数组概念、声明及初始化方法,包括一维数组、多维数组的使用技巧,并通过实例展示了数组排序、杨辉三角等应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组

数组概述

数组是多个相同类型数据的组合,实现对这些数据的统一管理。
数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量。
数组中的元素可以是任何数据类型,包括基本类型和引用类型。


一维数组声明

一维数组的声明方式: type var[] 或 type[] var
例如:
  int a[];
  int[] a1;
  double b[];
  Mydate []c; //对象数组
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法


数组元素的引用

Java中使用关键字 new 创建数组对象
定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:数组名[数组元素下标]
  数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
  数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;

  如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
每个数组都有一个属性 length 指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)


数组元素的默认初始化

数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化
例如:
public class Test {
  public static void main(String argv[]) {
    int a[]= new int[5]; 
    System.out.println(a[3]); //a[3]的默认值为0
  }
}


数组元素的默认初始值


创建基本数据类型数组

Java中使用关键字new 创建数组对象

public class Test {
 public static void main(String args[]) {
  int[] s;
  s = new int[10];
  for ( int i=0; i<10; i++ ) {
   s[i] =2*i+1;
   System.out.println(s[i]);
  }
 }
}


创建对象数组

1、

class MyDate{
    private int day;
    private int month;
    private int year;
    public MyDate(int d, int m, int y){
        day = d; month = m; year = y;
    }
    public void display(){
        System.out.println(day + "-" + month + "-" + year);
    }
}


2、

public class Test {
    public static void main(String args[]) {
        MyDate[] m;
        m = new MyDate[10];
        for ( int i=0; i<10; i++ ) {
            m[i] =new MyDate(i+1, i+1,1990+i);
            m[i].display();
        }
    }
}


数组初始化

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

    int a[];
    a = new int[3];
    a[0] = 3;
    a[1] = 9;
    a[2] = 8;
    MyDate dates[];
    dates = new MyDate[3];
    dates[0] = new MyDate(22, 7, 1964);
    dates[1] = new MyDate(1, 1, 2000);
    dates[2] = new MyDate(22, 12, 1964);


静态初始化:在定义数组的同时就为数组元素分配空间并赋值。

    int a[] = { 3, 9, 8};

    MyDate dates[] = {
        new MyDate(22, 7, 1964),
        new MyDate(1, 1, 2000),
        new MyDate(22, 12, 1964)
    };


练习


1、数组的常见操作

 

    //1. 数组的声明
    //int    i = 0;
    int [] a = null; //推荐使用此种方式进行声明. 
    int b [] = null;
        
    //注意: Java语言中声明数组时不能指定其长度(数组中元素的数)
    //int [5] c = null;
        
    //注意: 若没有为数组变量分配指向的内存空间, 就调用其属性, 会在运行时发生 "空指针异常"
    //System.out.println(a.length); 
        
    //2. 为数组分配内存空间
    a = new int[10];

    //3. 获取数组的长度
    System.out.println(a.length);  //10
        
    //5. 对数组元素进行初始化
    for(int i = 0; i < a.length; i++){
        a[i] = 100 + i;
    }
        
    //4. 访问数组的元素: 数组名[数组元素下标]. 注意: 下标从 0 开始, 所以最大值是 lengh - 1, 而不是length;
    //数组元素会进行默认的初始化: 
    for(int i = 0; i < a.length; i++){
        System.out.println(a[i]);
    }
        
    //若访问数组的下标超过合法范围, 则在运行时会抛出ArrayIndexOutOfBoundsException
    //a[10] = 10;
        
    //数组的静态初始化
    int [] c = {1, 2, 3, 4, 5};
    int [] d = new int[]{2, 3, 4, 5, 6};
        
    for(int i = 0; i < d.length; i++){
        System.out.println(d[i]);
    }
        
    //声明一个二维数组
    int [][] aa = new int[5][];
        
    //对二维数组的元素进行初始化: 二维数组的元素是一个一维数组!
    //遍历需要使用嵌套的 for 循环. 
    for(int i = 0; i < aa.length; i++){
        aa[i] = new int[i + 1];
            
        for(int j = 0; j < aa[i].length; j++){
            aa[i][j] = 1 + i * j;
        }
    }
        
    //对二维数组进行遍历
    for(int i = 0; i < aa.length; i++){
        for(int j = 0; j < aa[i].length; j++){
            System.out.print(aa[i][j] + "  ");
        }
        System.out.println(); 
    }

 


2、从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
  成绩>=最高分-10 等级为’A’ 成绩>=最高分-20 等级为’B’
  成绩>=最高分-30 等级为’C’ 其余 等级为’D’
  提示:先读入学生人数,根据人数创建int数组,存放学生成绩。

  /**
   * 2.从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
   *        成绩>=最高分-10  等级为’A’   成绩>=最高分-20  等级为’B’
   *         成绩>=最高分-30  等级为’C’   其余     等级为’D’
   *   提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
   */
    //1. 创建 Scanner 类
    Scanner scanner = new Scanner(System.in);
        
    //2. 读入要录入的学生人数
    System.out.print("请输入学生人数");
    int count = scanner.nextInt();
    
    //3. 创建一个 int 类型的数组, 用于存放学员的成绩, 数组的长度为 2 所录入数值
    int [] scores = new int[count];
        
    //4. 利用循环录入学生的成绩, 同时得到最高分. 把学生成绩录入到 3 声明的数组中.
    int highScore = 0;
        
    for(int i = 0; i < scores.length; i++){
        scores[i] = scanner.nextInt();
    
        if(scores[i] > highScore){
            highScore = scores[i];
        }
    }
        
    //5. 遍历 3 声明的数组, 根据最高分, 获取学生的升级等级. 
    for(int i = 0; i < scores.length; i++){
        if(scores[i] >= highScore - 10){
            System.out.println("student " + i + " score is " + scores[i] + "  grade is A");
        }else if(scores[i] >= highScore - 20){
            System.out.println("student " + i + " score is " + scores[i] + "  grade is B");
        }else if(scores[i] >= highScore - 30){
            System.out.println("student " + i + " score is " + scores[i] + "  grade is C");
        }else{
            System.out.println("student " + i + " score is " + scores[i] + "  grade is D");
        }
    }

 

多维数组

二维数组举例:
int [][] a = {{1,2},{3,4,0,9},{5,6,7}};

 


Java中多维数组被做为数组的数组处理
Java中多维数组的声明和初始化应按从高维到低维的顺序进行
  int t [][] = new int [4][];//t有4行,第一个维数不空即可
  t[0] = new int[5]; //每一行都是一个有5个元素的一维数组
  t[1] = new int[5];
  int t1[][] = new int [][4]; //非法


Java中多维数组不必须是规则矩阵形式
  int[][] tt = new int[4][];
  tt[0] = new int[2];
  tt[1] = new int[4];
  tt[2] = new int[6];
  tt[3] = new int[8];

  int tt[][] = new int[4][5]; //tt是一个4行5列的二维数组

 

  int [][] aa = new int[4][];

  aa[0] = new int[5];

  aa[1] = new int[1];

  aa[2] = new int[3];

  //…


多维数组初始化

静态初始化
  int intArray[][] = {{1,2},{2,3},{3,4,5}};
  int intArray1[3][2] = {{1,2},{2,3},{4,5}};
  //illegal,等号左边不能指定维数
动态初始化
  int a[][] = new int[4][5];
  int b[][] = new int[3][]
  b[0] = new int[2];
  b[1] = new int[3];
  b[2] = new int[5];


数组排序

Java.util.Arrays类的 sort() 方法提供了数组元素排序功能:

 1 import java.util.*;
 2 public class Sort {
 3     public static void main(String[] args) {
 4         int [] number = {5,900,1,5,77,30,64,700};
 5         Arrays.sort(number);
 6 
 7         for(int i = 0; i < number.length; i++)
 8             System.out.println(number[i]);
 9     }
10 }

 

使用二维数组打印 10 行的杨辉三角, 杨辉三角实际上是二项式展开式的系数

/**
  * 1                       (a+b)^0
  * 1  1                    (a+b)^1
  * 1  2  1                 (a+b)^2
  * 1  3  3  1              (a+b)^3 
  * 1  4  6  4  1
  * 1  5  10 10 5  1
  * ...
  * 1. 什么是杨辉三角: 二项式展开式的系数
  * 2. 为什么使用的是 二维数组: 因为杨辉三角由行和列组成, 每一行是一个一维数组, 而杨辉三角则是有一维数组组成的数组, 即二维数组. 
  * 3. 杨辉三角的具体特点: 
  * 3.1 第 n 行有 n 个元素(n >= 1)
  * 3.2 每一行的第一个元素和最后一个元素都是 1
  * 3.3 不等于 1 的那些元素的值为上一行的对应列和对应列的前一列的元素的和. 
*/
        
    //1. 先声明一个二维数组: 二维数组有 10 个元素
    int [][] yh = new int[10][];
        
    //2. 对二维数组的元素进行初始化: 第 i 个元素(i 从 0 开始) 为长度为 i + 1 的一维数组.
    for(int i = 0; i < yh.length; i++){
      //二维数组的每一个元素是一维数组, 而一维数组时引用类型, 其默认值为 null
      //System.out.println(yh[i]); 
            
      yh[i] = new int[i + 1];

      //3. 对具体的每一个元素进行初始化(是 1 的元素): yh[i][0] = 1, yh[i][i] = 1
      yh[i][0] = 1;
      yh[i][i] = 1;

      //4. 对具体的每一个元素进行初始化(不是 1 的元素): yh[i][j] = yh[i-1][j] + yh[i-1][j-1]; 
      //   (i > 1 && j > 0 && j < i)
      if(i > 1){
          for(int j = 1; j < i; j++){
              yh[i][j] = yh[i-1][j] + yh[i-1][j-1];
          }
      }
    }
    //打印
    for(int i = 0; i < yh.length; i++){
        for(int j = 0; j < yh[i].length; j++){
            System.out.print(yh[i][j] + "\t");
        }
       System.out.println();
  }

 

### 回答1: 动态数组是一种可以根据需要动态增加或减少大小的数组。在Java中,动态数组可以使用ArrayList类来实现。ArrayList类提供了一些方法来添加、删除、获取和修改元素。与普通数组不同的是,ArrayList可以自动调整大小,因此不需要手动管理数组大小。 ### 回答2: 在Java中,数组是存储一组同类型元素的有效数据结构。通常,当我们需要定义数组但无法确定其长度时,可以使用动态数组。与静态数组相比,动态数组可以在程序运行时动态地改变其大小。它不需要分配整个内存块,而是可以按需增加或减少其大小。Java通过ArrayList类来实现动态数组。 要使用ArrayList类,需要导入Java.util包,然后定义一个ArrayList变量。与静态数组不同,对动态数组进行元素的添加或删除不需要重新定义整个数组。因此,对于频繁变化的数据结构,动态数组是一种更为灵活和高效率的选项。 ArrayList类有许多有用的方法,例如add(),remove(),size(),get()等。使用add()方法可以将一个元素添加到动态数组的末尾。如果需要在指定位置添加元素,则可以使用add(int index, Object element)方法。remove()方法可以从数组中删除一个元素。size()方法可以返回动态数组目前的大小,而get()方法可以按照索引值返回数组中的元素。 虽然动态数组的使用便捷和高效,在使用时需要注意一些细节问题。因为动态数组内部使用了一个数组,所以频繁地添加和删除元素会导致内部数组的扩充和缩小,从而降低性能。在处理大量数据时,我们应该考虑使用其他数据结构,例如链表。 总之,动态数组Java编程中非常常用,特别是在需要不确定数组长度的情况下。熟练掌握动态数组的使用方法,可以提高代码的效率和可读性,同时也丰富了Java的数据结构知识。 ### 回答3: 动态数组,也称为可调整数组,是一种支持动态内存分配的数组类型。与静态数组不同,动态数组的大小在程序运行时可以动态调整。在Java中,动态数组可以使用数组列表(ArrayList)或Vector来实现。 ArrayList是Java中常用的动态数组类。声明和初始化一个ArrayList的方法如下: ```java ArrayList<String> list = new ArrayList<String>(); ``` 在这个示例中,ArrayList中存储的是字符串类型的元素。如果要存储其他类型的元素,只需相应地将“String”替换为相应的类型即可。 向ArrayList中添加元素的方法是“add”方法。例如,在上面的示例中,我们可以使用以下代码向ArrayList中添加元素: ```java list.add("apple"); // 添加元素"apple"到列表中 ``` 获取ArrayList中元素的方法是“get”方法。例如: ```java String element = list.get(0); // 获取列表中索引为0的元素 ``` 需要注意的是,ArrayList和Vector都是动态数组类型,它们的区别在于线程同步。Vector是线程安全的,而ArrayList非线程安全。因此,在多线程环境下使用动态数组时,建议使用Vector。 除了ArrayList和Vector之外,还有其他的动态数组实现方式,比如LinkedList、CopyOnWriteArrayList等。 总的来说,动态数组是一种非常常用的数据结构类型,它具有动态调整大小的优势,适用于需要频繁插入和删除元素的情况。在Java中,我们可以使用ArrayList或Vector来实现动态数组,并根据需要选择合适的实现方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值