1、一维数组
数组的概念:
数组使同一种类型数据的集合;即能够存放多个相同类型的数据的容器。
数组的定义方式
数组是存放多个数据的容器,Java中需要使用new关键字来创建容器,在创建容器时也要明确容器的大小,即容器中存放数据个数。
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
int[] arr=new int[3];//通过new关键字创建了一个长度为3,元素类型是int的数组实体。
数组的好处
数组可以存储多个数据,而且可以对数据进行编号,从0开始。操作元素完成可以通过编号(索引)完成。
int[] arr = new int[3];
arr[0] = 3; //给数组编号(角标)为0的空间中存放int类型的常量值3 System.out.println(arr[1]);//输出数组编号为1空间中的值
常见问题
数组角标越界异常

ArrayIndexOutOfBoundsExcepition:访问到了数组不存在的索引时,会发生该异常

空指针异常

NullPointerException:当使用没有任何实体指向的引用变量操作实体时,运行会发生该异常

2、二维数组
数组定义

int[][] arr=new int[3][2];
定义了名称为arr的二维数组,二维数组中有3个一维数组,每一个一维数组中有2个元素,一维数组的名称分别为arr[0],arr[1],arr[2]。
二维数组赋值:arr[1][1]=78;
System.out.println(arr);//二维数组实体
System.out.println(arr[0]);//一维数组实体
System.out.println(arr[0][0]);//一维数组中的元素

内存图解

public static void main(String[] args){
    int[][] arr=new int[3][2];
    arr[1][1]=78;
}

java 数组每k个元素fanzhuan java数组中的元素_数组


3、经典例题

(1)编写一个方法,求整数矩阵中特定列的所有元素的和,使用下面的方法头:

public static double sumColumn(double[][] m,int columnIndex)

编写一个测试程序,读取一个3*4的矩阵,然后显示每列元素的和。

import java.util.Scanner;
class Class35{
    public static void main(String[] args){
        //1.创建了一个3×4的矩阵
        double[][] matrix=new double[3][4];
        //2.提示用户输入数据按照行输入
        Scanner scanner=new Scanner(System.in);
        System.out.println("Enter a 3-by-4 matrix row by row:");
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
                matrix[i][j]=scanner.nextDouble();
            }
        }
        System.out.println(sumColumn(matrix,2));
    }
    public static double sumColumn(double[][] m,int columnIndex){
        double sum=0;
        for(int i=0;i<m.length;i++){
            sum+=m[i][columnIndex];
        }
        return sum;
    }
}

(2)编写以下方法,如果参数中的list数组已经按照升序排好了,则返回true。
public static boolean isSorted(int[] list)
编写一个测试程序,提示用户输入一个列表,显示该列表是否已经排好序。注意,输入中的第一个数表示列表中的元素个数。该数不是列表的一部分。

import java.util.Scanner;
class Class31{
    public static void main(String[] args){
        //1.获取输入的数据
        //2.长度+数据若干
        //3.根据长度创建数组
        //4.输入数据
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter a list:");
        int[] list=new int[scanner.nextInt()];
        for(int i=0;i<list.length;i++){
            list[i]=scanner.nextInt();
        }
        //5.判断数据
        if(isSorted(list)){
            System.out.println("OK");
        }else{
            System.out.println("NO");
        }
    }
    public static boolean isSorted(int[] list){
        for(int i=1;i<list.length;i++){
            if(list[i-1]>list[i]){
                return false;
            }
        }
        return true;
    }
}

(3)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是0或1的行、列和对角线。

import java.util.Scanner;
class Class36{
    /*
    1.提示用户输入方阵的尺寸
    2.创建相应的二维数组
    3.遍历二维数组,给每个元素随机赋值0或1
    4.逐行判断是否全部相等
    5.逐列判断是否全部相等
    6.判断主对角线是否全=
    7.判断副对角线是否全=
    */
    public static void main(String[] args){
        //1.
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter the size for the matrix:");
        int size=scanner.nextInt();
        //2.
        int[][] matrix=new int[size][size];
        
        //3.
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix[i].length;j++){
                matrix[i][j]=Math.random()>0.5?1:0;
            }
        }
        for(int i=0;i<matrix.length;i++){
            for(int j=0;j<matrix.length;j++){
                System.out.print(matrix[i][j]+" ");
            }
            System.out.println();
        }
        //4.
        for(int i=0;i<matrix.length;i++){
            boolean flag=true;
            for(int j=1;j<matrix[i].length;j++){
                if(matrix[i][0]!=matrix[i][j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.println("All "+matrix[i][0]+" on row "+i);
            }
        }
        //5.
        for(int j=0;j<matrix.length;j++){
            boolean flag=true;
            for(int i=1;i<matrix.length;i++){
                if(matrix[0][j]!=matrix[i][j]){
                    flag=false;
                    break;
                }
            }
            if(flag){
                System.out.println("All "+matrix[0][j]+" on col "+j);
            }
        }
        //6.
        boolean flag=true;
        for(int x=1;x<matrix.length;x++){
            if(matrix[0][0]!=matrix[x][x]){
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.println("All "+matrix[0][0]+" on major diagonal ");    
        }
        //7.
        flag=true;
        for(int i=matrix.length-2,j=1;i>=0&&j<matrix.length;i--,j++){
            if(matrix[matrix.length-1][0]!=matrix[i][j]){
                flag=false;
                break;
            }
        }
        if(flag){
            System.out.println("All "+matrix[matrix.length-1][0]+" on sub diagonal ");    
        }
    }
}