008 java中数组的使用方法

数组的介绍(参考博文http://c.biancheng.net/view/5852.html

概念:数组有一维数组,二维数组和多维数组,是一种复合数据类型(也是引用数据类型),一个数组中的每一个元素具有相同的数据类型,具有一致性,有序性和不可变性。

组成:数组名,下标(索引),元素,数组的长度

(注意:数组的索引从0开始)

数组的长度一旦确定不能修改

举例:

 file新建工程---src创建包.java-----再在包下创建类ArrayTest.java

一:一维数组:

(1)一维数组的声明和初始化

在程序中如果想要使用数组,必须先声明后使用

01.声明:

type[] arrayName;    // 数据类型[] 数组名;

在声明数组时,不需要规定数组的长度

int score[10];    // 这是错误的

02.分配内存空间--初始化

(分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存储数据。在 Java 中可以使用 new 关键字来给数组分配空间

arrayName = new type[size];    // 数组名 = new 数据类型[数组长度];

数组长度表明数组中能够存放的数组元素个数。

 例如:

  1. score = new int[10];
  2. price = new double[30];
  3. name = new String[20];

也可以在声明数组时就给它分配空间,语法格式如下:

type[] arrayName = new type[size];    // 数据类型[] 数组名 = new 数据类型[数组长度];

例如,声明并分配一个长度为 5 的 int 类型数组 arr,代码如下:

int[] arr = new int[5];

注意:一旦声明了数组的大小不能修改。

03.初始化--为每一个元素赋值

Java中的数组必须先初始化,才能使用。

例1:创建包含 5 个元素的 int 类型的数组,然后分别将元素的值设置为 1、2、3、5 和 8。代码如下:

int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 5;
number[4] = 8;

例2:使用 new 指定数组元素的值

type[] arrayName = new type[]{值 1,值 2,值 3,值 4,• • •,值 n};

更改例 1中的代码,使用 new 直接指定数组元素的值

int[] number = new int[]{1, 2, 3, 5, 8};

注意:不要在进行数组初始化时,既指定数组的长度,也为每个数组元素分配初始值,这样会造成代码错误。例如下面代码:

int[] number = new int [5] {1,2,3,4,​5}; //这是错误的

04.获取单个元素

获取单个元素是指获取数组中的一个元素,如第一个元素或最后一个元素。获取单个元素指定元素所在数组的下标即可。

arrayName[index];

//arrayName:数组变量
//index表示下标

例1:

//获取 number 数组中的第一个元素、最后一个元素和第六个元素,并将元素的值输出。
int[] number = {1,2,3,5,8};
System.out.println("获取第一个元素:"+number[0]);
System.out.println("获取最后一个元素:"+number[number.length-1]);
System.out.println("获取第6个元素:"+number[5])

执行上述代码,输出结果如下所示:

获取第一个元素:1
获取最后一个元素:8
java.lang.ArrayIndexOutOfBoundsException: 5

我们一共存入了 5 个值,所以下标的取值为 0~4。因为 number[5] 取出的内容超过了这个下标,所以输出结果会提示数组索引超出绑定异常(ArrayIndexOutOfBoundsException)。这一点是在使用数组中是经常出现的问题,大家在编写程序时应该引起注意。

例2:编写一个 Java 程序,使用数组存放录入的 5 件商品价格,然后使用下标访问第 3 个元素的值。

import java.util.Scanner;
public class Test06 {
    public static void main(String[] args) {
        int[] prices = new int[5]; // 声明数组并分配空间
        Scanner input = new Scanner(System.in); // 接收用户从控制台输入的数据
        for (int i = 0; i < prices.length; i++) {
            System.out.println("请输入第" + (i + 1) + "件商品的价格:");
            prices[i] = input.nextInt(); // 接收用户从控制台输入的数据
        }
        System.out.println("第 3 件商品的价格为:" + prices[2]);
    }
}

上述代码的“int[] prices = new int[5]”语句创建了需要 5 个元素空间的 prices 数组,然后结合 for 循环向数组中的每个元素赋值。

注意:在 Java 中取得数组的长度(也就是数组元素的长度)可以利用“数组名称.length”,返回一个 int 型数据。

数组的索引从 0 开始,而 for 循环中的变量 i 也从 0 开始,因此 score 数组中的元素可以使用 scored 来表示,大大简化了代码。最后使用 prices[2] 获取 prices 数组的第 3 个元素,最终运行效果如下所示。

请输入第1件商品的价格:
5
请输入第2件商品的价格:
4
请输入第3件商品的价格:
6
请输入第4件商品的价格:
4
请输入第5件商品的价格:
8
第 3 件商品的价格为:6

05.获取全部元素
当数组中的元素数量不多时,要获取数组中的全部元素,可以使用下标逐个获取元素。但是,如果数组中的元素过多,再使用单个下标则显得烦琐,此时使用一种简单的方法可以获取全部元素——使用循环语句。

下面利用 for 循环语句遍历 number 数组中的全部元素,并将元素的值输出。代码如下:

int[] number = {1,2,3,5,8};
for (int i=0;i<number.length;i++) {
    System.out.println("第"+(i+1)+"个元素的值是:"+number[i]);
}

还可以使用 foreach 遍历数组中的元素,并将元素的值输出。代码如下:

for(int val:number) {
System.out.print("元素的值依次是:"+val+"	");
}

(2)二维数组的声明和初始化

(原博文地址:http://c.biancheng.net/view/5857.html

 01.概念

二维数组被看作数组的数组,即二维数组为一个特殊的一维数组,其每个元素又是一个一维数组。Java 并不直接支持二维数组,但是允许定义数组元素是一维数组的一维数组,以达到同样的效果。

 02.创建(声名)

//声明方法一
//第一个中括号表示行,第二个中括号表示列。
type arrayName[][];    // 数据类型 数组名[][];
//声明方法二
type[][] arrayName;    // 数据类型[][] 数组名;

例:下面分别声明 int 类型和 char 类型的数组

int[][] age;
char[][] sex;

03.初始化

二维数组可以初始化,和一维数组一样,可以通过 3 种方式来指定元素的初始值。

type[][] arrayName = new type[][]{值 1,值 2,值 3,…,值 n};    // 在定义时初始化
type[][] arrayName = new type[size1][size2];    // 给定空间,在赋值
type[][] arrayName = new type[size][];    // 数组第二维长度为空,可变化

例1:使用三种方式声明 int 类型的二维数组,然后初始化该二维数组

//使用第一种方式声明 int 类型的二维数组,然后初始化该二维数组
int[][] temp = new int[][]{{1,2},{3,4}};
//使用第二种方式声明 int 类型的二维数组,然后初始化该二维数组
int[][] temp = new int[2][2];
//使用第三种方式声明 int 类型的二维数组,并且初始化数组
int[][] temp = new int[2][];

 04.获取单个元素

在上部分使用的前 2 种方式创建并初始化了一个二行二列的 int 类型数组 temp。

当需要获取二维数组中元素的值时,也可以使用下标来表示

例如,要获取第二行第二列元素的值,应该使用 temp[1][1]来表示。

由于数组的下标起始值为 0,因此行和列的下标需要减 1。

arrayName[i-1][j-1];

例1 .通过下标获取 class_score 数组中第二行第二列元素的值与第四行第一列元素的值

public static void main(String[] args) {
    double[][] class_score = {{10.0,99,99},{100,98,97},{100,100,99.5},{99.5,99,98.5}};
    System.out.println("第二行第二列元素的值:"+class_score[1][1]);
    System.out.println("第四行第一列元素的值:"+class_score[3][0]);
}

执行上述代码,输出结果如下:

第二行第二列元素的值:98.0
第四行第一列元素的值:99.5

05.获取全部元素

一维数组中直接使用数组的 length 属性获取数组元素的个数;

在二维数组中,直接使用 length 属性获取的是数组的行数,在指定的索引后加上 length(如 array[0].length)表示的是该行拥有多少个元素,即列数。

如果要获取二维数组中的全部元素,最简单、最常用的办法就是使用 for 语句。在一维数组全部输出时,我们使用一层 for 循环,而二维数组要想全部输出,则使用嵌套 for 循环(2 层 for 循环)。

例1:使用 for 循环语句遍历 double 类型的 class_score 数组的元素,并输出每一行每一列元素的值。代码如下:

public static void main(String[] args) {
    double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };
     // 遍历行
    for (int i = 0; i < class_score.length; i++) { 
        //遍历列
        for (int j = 0; j < class_score[i].length; j++) {
            System.out.println("class_score[" + i + "][" + j + "]=" + class_score[i][j]);
        }
    }
}

执行上述代码,输出结果如下所示。

class_score[0][0]=100.0
class_score[0][1]=99.0
class_score[0][2]=99.0
class_score[1][0]=100.0
class_score[1][1]=98.0
class_score[1][2]=97.0
class_score[2][0]=100.0
class_score[2][1]=100.0
class_score[2][2]=99.5
class_score[3][0]=99.5
class_score[3][1]=99.0
class_score[3][2]=98.5

例2:假设有一个矩阵为 5 行 5 列,该矩阵是由程序随机产生的 10 以内数字排列而成。下面使用二维数组来创建该矩阵

public class Test11 {
    public static void main(String[] args) {
        // 创建一个二维矩阵
        int[][] matrix = new int[5][5];
        // 随机分配值
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                matrix[i][j] = (int) (Math.random() * 10);
            }
        }
        System.out.println("下面是程序生成的矩阵
");
        // 遍历二维矩阵并输出
        for (int k = 0; k < matrix.length; k++) {
            for (int g = 0; g < matrix[k].length; g++) {
                System.out.print(matrix[k][g] + "");
            }
            System.out.println();
        }
    }
}

首先定义了一个二维数组,然后使用两个嵌套的 for 循环向二维数组中的每个元素赋值。其中,Math.random() 方法返回的是一个 double 类型的数值,数值为 0.6、0.9 等,因此乘以 10 之后为 10 以内的整数。最后又使用了两个嵌套的 for 循环遍历二维数组,输出二维数组中的值,从而产生矩阵。

运行该程序的结果如下所示。

下面是程序生成的矩阵

78148
69230
43823
75663
05688

for each 循环语句不能自动处理二维数组的每一个元素。它是按照行, 也就是一维数组处理的。要想访问二维教组 a 的所有元素, 需要使用两个嵌套的循环, 如下所示:

for (double[] row : a) {
for (double value : row) {
......
}
}

06.获取整行元素

除了获取单个元素和全部元素之外,还可以单独获取二维数组的某一行中所有元素的值,或者二维数组中某一列元素的值。获取指定行的元素时,需要将行数固定,然后只遍历该行中的全部列即可。

例:编写一个案例,接收用户在控制台输入的行数,然后获取该行中所有元素的值。

public static void main(String[] args) {
    double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };
    Scanner scan = new Scanner(System.in);
    System.out.println("当前数组只有" + class_score.length + "行,您想查看第几行的元素?请输入:");
    int number = scan.nextInt();
    for (int j = 0; j < class_score[number - 1].length; j++) {
        System.out.println("第" + number + "行的第[" + j + "]个元素的值是:" + class_score[number - 1][j]);
    }
}

执行上述代码进行测试,输出结果如下所示。

当前数组只有4行,您想查看第几行的元素?请输入:
3
第3行的第[0]个元素的值是:100.0
第3行的第[1]个元素的值是:100.0
第3行的第[2]个元素的值是:99.5

07.获取整列元素

获取指定列的元素与获取指定行的元素相似,保持列不变,遍历每一行的该列即可。

例 编写一个案例,接收用户在控制台中输入的列数,然后获取二维数组中所有行中该列的值。

public static void main(String[] args) {
    double[][] class_score = { { 100, 99, 99 }, { 100, 98, 97 }, { 100, 100, 99.5 }, { 99.5, 99, 98.5 } };
    Scanner scan = new Scanner(System.in);
    System.out.println("您要获取哪一列的值?请输入:");
    int number = scan.nextInt();
    for (int i = 0; i < class_score.length; i++) {
        System.out.println("第 " + (i + 1) + " 行的第[" + number + "]个元素的值是" + class_score[i][number]);
    }
}

执行上述代码进行测试,如下所示。

您要获取哪一列的值?请输入:
2
第 1 行的第[2]个元素的值是99.0
第 2 行的第[2]个元素的值是97.0
第 3 行的第[2]个元素的值是99.5
第 4 行的第[2]个元素的值是98.5

本文来自博客园,作者:Jaoany,转载请注明原文链接:https://www.cnblogs.com/fanglijiao/p/15166104.html

原文地址:https://www.cnblogs.com/fanglijiao/p/15166104.html