📜  Java中的多维数组

📅  最后修改于: 2022-05-13 01:55:04.193000             🧑  作者: Mango

Java中的多维数组

Java中的数组基础
多维数组可以用简单的话定义为数组数组。多维数组中的数据以表格形式存储(按行主要顺序)。

句法:

在哪里:

  • data_type :要存储在数组中的数据类型。例如:int、char等。
  • 维度:创建的数组的维度。
    例如:一维、二维等。
  • array_name :数组的名称
  • size1, size2, ..., sizeN : 尺寸的大小。

例子:

Two dimensional array:
int[][] twoD_arr = new int[10][20];

Three dimensional array:
int[][][] threeD_arr = new int[10][20][30];

多维数组的大小:可以通过乘以所有维度的大小来计算多维数组中可以存储的元素总数。

例如:
数组int[][] x = new int[10][20]总共可以存储 (10*20) = 200 个元素。
同样,数组int[][][] x = new int[5][10][20]总共可以存储 (5*10*20) = 1000 个元素。

二维数组(2D-Array)

二维数组是多维数组的最简单形式。二维数组可以看成是一维数组的数组,以便于理解。

间接申报方式:

  • 声明 - 语法:
    data_type[][] array_name = new data_type[x][y];
            For example: int[][] arr = new int[10][20];
            
  • 初始化——语法:
    array_name[row_index][column_index] = value;
            For example: arr[0][0] = 1;
            

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][] arr = new int[10][20];
        arr[0][0] = 1;
  
        System.out.println("arr[0][0] = " + arr[0][0]);
    }
}
输出:
arr[0][0] = 1

直接申报方式:

句法:

data_type[][] array_name = {
                             {valueR1C1, valueR1C2, ....}, 
                             {valueR2C1, valueR2C2, ....}
                           };

For example: int[][] arr = {{1, 2}, {3, 4}};

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][] arr = { { 1, 2 }, { 3, 4 } };
  
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                System.out.println("arr[" + i + "][" + j + "] = "
                                   + arr[i][j]);
    }
}
输出:
arr[0][0] = 1
arr[0][1] = 2
arr[1][0] = 3
arr[1][1] = 4

访问二维数组的元素

二维数组中的元素通常由x[i][j]引用,其中“i”是行号,“j”是列号。

句法:

x[row_index][column_index]

例如:

int[][] arr = new int[10][20];
arr[0][0] = 1;

上面的示例表示存在于第一行和第一列中的元素。

注意:如果数组的大小为 N,则在数组中。其索引将从 0 到 N-1。因此,对于 row_index 2,实际行号为 2+1 = 3。

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][] arr = { { 1, 2 }, { 3, 4 } };
  
        System.out.println("arr[0][0] = " + arr[0][0]);
    }
}
输出:
arr[0][0] = 1

以表格格式表示的二维数组:二维数组可以被视为具有“x”行和“y”列的表,其中行号范围从 0 到 (x-1),列号范围从 0 到 ( y-1)。一个 3 行 3 列的二维数组“x”如下所示:

二维

以表格格式打印二维数组:

要输出二维数组的所有元素,请使用嵌套的 for 循环。为此,需要两个 for 循环,一个用于遍历行,另一个用于遍历列。

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][] arr = { { 1, 2 }, { 3, 4 } };
  
        for (int i = 0; i < 2; i++) {
            for (int j = 0; j < 2; j++) {
                System.out.print(arr[i][j] + " ");
            }
  
            System.out.println();
        }
    }
}
输出:
1 2 
3 4

三维阵列(3D-Array)

三维数组是多维数组的复杂形式。一个三维数组可以看成是二维数组的数组,以便于理解。

间接申报方式:

  • 声明 - 语法:
    data_type[][][] array_name = new data_type[x][y][z];
            For example: int[][][] arr = new int[10][20][30];
            
  • 初始化——语法:
    array_name[array_index][row_index][column_index] = value;
            For example: arr[0][0][0] = 1;
            

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][][] arr = new int[10][20][30];
        arr[0][0][0] = 1;
  
        System.out.println("arr[0][0][0] = " + arr[0][0][0]);
    }
}
输出:
arr[0][0][0] = 1

直接申报方式:

句法:

data_type[][][] array_name = {
                              {
                               {valueA1R1C1, valueA1R1C2, ....}, 
                               {valueA1R2C1, valueA1R2C2, ....}
                              },
                              {
                               {valueA2R1C1, valueA2R1C2, ....}, 
                               {valueA2R2C1, valueA2R2C2, ....}
                              }
                             };

For example: int[][][] arr = { {{1, 2}, {3, 4}}, {{5, 6}, {7, 8}} };

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][][] arr = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };
  
        for (int i = 0; i < 2; i++)
            for (int j = 0; j < 2; j++)
                for (int z = 0; z < 2; z++)
                    System.out.println("arr[" + i
                                       + "]["
                                       + j + "]["
                                       + z + "] = "
                                       + arr[i][j][z]);
    }
}
输出:
arr[0][0][0] = 1
arr[0][0][1] = 2
arr[0][1][0] = 3
arr[0][1][1] = 4
arr[1][0][0] = 5
arr[1][0][1] = 6
arr[1][1][0] = 7
arr[1][1][1] = 8

访问三维数组的元素

三维数组中的元素通常用x[i][j][k]表示,其中“i”是数组编号,“j”是行号,“k”是列号。

句法:

x[array_index][row_index][column_index]

例如:

int[][][] arr = new int[10][20][30];
arr[0][0][0] = 1;

上面的示例表示在声明的 3D 数组中的第一个数组的第一行和第一列中存在的元素。

注意:如果数组的大小为 N,则在数组中。其索引将从 0 到 N-1。因此,对于 row_index 2,实际行号为 2+1 = 3。

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][][] arr = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };
  
        System.out.println("arr[0][0][0] = " + arr[0][0][0]);
    }
}
输出:
arr[0][0][0] = 1

以表格格式表示的 3D 数组:一个三维数组可以看作是具有“x”行和“y”列的数组表,其中行号范围从 0 到 (x-1),列号范围从 0到 (y-1)。一个包含 3 行 3 列的 3 个数组的三维数组如下所示:

以表格格式打印 3D 数组:

要输出三维数组的所有元素,请使用嵌套的 for 循环。为此,需要三个 for 循环,一个遍历数组,第二个遍历行,另一个遍历列。

例子:

class GFG {
    public static void main(String[] args)
    {
  
        int[][][] arr = { { { 1, 2 }, { 3, 4 } },
                          { { 5, 6 }, { 7, 8 } } };
  
        for (int i = 0; i < 2; i++) {
  
            for (int j = 0; j < 2; j++) {
  
                for (int k = 0; k < 2; k++) {
  
                    System.out.print(arr[i][j][k] + " ");
                }
  
                System.out.println();
            }
            System.out.println();
        }
    }
}
输出:
1 2 
3 4 

5 6 
7 8

在运行时插入多维数组:
此主题在运行时被强制 n 将用户定义的输入输入到多维数组中。它的重点是用户首先在运行时向程序提供所有输入,并且在输入所有输入之后,程序将相应地针对每个输入提供输出。当用户希望首先为具有多个不同值的多个测试用例进行输入并且在完成所有这些事情之后,程序将开始提供输出时,这很有用。

例如,让我们找出输入数组中偶数和奇数的总数。在这里,我们将使用二维数组的概念。以下几点解释了即将到来的代码中各种元素的使用:

  • 行整数被视为测试用例的数量,列值被视为每个测试用例中的值。
  • 一个 for() 循环用于更新测试用例编号,另一个 for() 循环用于获取相应的数组值。
  • 当所有输入项都完成后,再次以相同的方式使用两个 for() 循环根据指定的条件执行程序。
  • 第一行输入是测试用例的总数。
  • 第二行显示第一个数组值的总数。
  • 第三行给出数组值等等。

执行:

import java.util.Scanner;
  
public class GFGTestCase {
    public static void main(
        String[] args)
    {
        // Scanner class to take
        // values from console
        Scanner scanner = new Scanner(System.in);
  
        // totalTestCases = total
        // number of TestCases
        // eachTestCaseValues =
        // values in each TestCase as
        // an Array values
        int totalTestCases, eachTestCaseValues;
  
        // takes total number of
        // TestCases as integer number
        totalTestCases = scanner.nextInt();
  
        // An array is formed as row
        // values for total testCases
        int[][] arrayMain = new int[totalTestCases][];
  
        // for loop to take input of
        // values in each TestCase
        for (int i = 0; i < arrayMain.length; i++) {
            eachTestCaseValues = scanner.nextInt();
            arrayMain[i] = new int[eachTestCaseValues];
            for (int j = 0; j < arrayMain[i].length; j++) {
                arrayMain[i][j] = scanner.nextInt();
            }
        } // All input entry is done.
  
        // Start executing output
        // according to condition provided
        for (int i = 0; i < arrayMain.length; i++) {
  
            // Initialize total number of
            // even & odd numbers to zero
            int nEvenNumbers = 0, nOddNumbers = 0;
  
            // prints TestCase number with
            // total number of its arguments
            System.out.println(
                "TestCase " + i + " with "
                + arrayMain[i].length + " values:");
            for (int j = 0; j < arrayMain[i].length; j++) {
                System.out.print(arrayMain[i][j] + " ");
  
                // even & odd counter updated as
                // eligible number is found
                if (arrayMain[i][j] % 2 == 0) {
                    nEvenNumbers++;
                }
                else {
                    nOddNumbers++;
                }
            }
            System.out.println();
  
            // Prints total numbers of
            // even & odd
            System.out.println(
                "Total Even numbers: " + nEvenNumbers
                + ", Total Odd numbers: " + nOddNumbers);
        }
    }
}
// This code is contributed by Udayan Kamble.
Input:
2
2
1 2
3
1 2 3

Output:
TestCase 0 with 2 values:
1 2 
Total Even numbers: 1, Total Odd numbers: 1
TestCase 1 with 3 values:
1 2 3 
Total Even numbers: 1, Total Odd numbers: 2

Input:
3
8
1 2 3 4 5 11 55 66
5
100 101 55 35 108
6
3 80 11 2 1 5

Output:
TestCase 0 with 8 values:
1 2 3 4 5 11 55 66 
Total Even numbers: 3, Total Odd numbers: 5
TestCase 1 with 5 values:
100 101 55 35 108 
Total Even numbers: 2, Total Odd numbers: 3
TestCase 2 with 6 values:
3 80 11 2 1 5 
Total Even numbers: 2, Total Odd numbers: 4