Java学习笔记——多维数组
来源:互联网 发布:php 汉字长度 编辑:程序博客网 时间:2024/05/19 12:36
简介
一维数组可以存储线性的元素集合,而二维数组则能够存储矩阵和表格。
二维数组的基本知识
二维数组的元素通过行和列的下标来访问。
声明二维数组变量并创建二维数组
声明二维数组的语法如下:
数据类型[][] 数组名;或者数据类型 数组名[][];
例如:
int[][] matrix;或者int matirx[][];使用这个语法创建 5 x 5 的int型二维数组:matrix = new int[5][5];
二维数组中使用两个下标,一个表示行,一个表示列。与一维数组一样,每个下标索引值都是 int 型的,从 0 开始。
注意: 使用 matrix[2,1]访问行下标为2、列下标为1的元素是一种长江错误。在 Java 中,每个下标必须放在一对方括号中。
也可以使用数组初始化来声明、创建和初始化一个二维数组:
int[][] array = {{1, 2, 3}, {2, 3, 4}, {3, 4, 5}};
获取二维数组的长度
二维数组实际上是一个数组,它的每个元素都是一个一维数组。数组 x 的长度是数组中元素的个数,可以用 x.length 获取该值。
锯齿数组
二维数组红的每一行本身就是一个数组,因此,各行的长度可以不同。这样的数组称为锯齿数组。
int[][] triangleArray = { {1, 2, 3, 4}, {2, 4, 6}, {3, 5}};
处理二维数组
嵌套的for循环常用于处理二维数组。
假设如下创建数组 matrix:
int[][] matrix = new int[10][10];
使用输入值初始化二维数组
使用循环,实现用户输入值初始化数组:
Scanner input = new Scanner(System.in);System.out.println("Enter " + matrix.length + " rows and " + matrix[0].length + " coulmns: ");for(int row = 0; row < matrix.length; row++) { for(int column = 0; column < matrix[row].length; column++) { matrix[row][column] = input.nextInt(); }}
使用随机值初始化二维数组
使用 0 到 99 之间的随机整数初始化数组:
for(int row = 0; row < matrix.length; row++) { for(int column = 0; column < matrix[row].length; column++) { matrix[row][column] = (int)(Math.random() * 100); }}
打印二维数组
为打印一个二维数组,可以使用这种循环打印数组中的每个元素:
for(int row = 0; row < matrix.length; row++) { for(int column = 0; column < matrix[row].length; column++) { System.out.println(matrix[row][column] + " "); } System.out.println();}
求所有元素的和
int total = 0;for(int row = 0; row < matrix.length; row++) { for(int column = 0; column < matrix[row].length; column++) { total += matrix[row][column]; }}
对数组按列求和
for(int column = 0; column < matrix[0].length; column++) { int total = 0; for(int row = 0; row < matrix.length; row++) total += matrix[row][column]; System.out.println("Sum for column " + column + " is " + total);}
求二维数组最大的一行和
使用变量 maxRow 和 indexOfMaxRow 分别跟踪和的最大值以及该行的索引值。
int maxRow = 0;int indexOfMaxRow = 0;for(int column = 0; column < matrix[0].length; column++) { maxRow += matrix[0][column];}for(int row = 1; row < matrix.length; row++) { int totalOfThisRow = 0; for(int column = 0; column < matrix[row].length; column++) totalOfThisRow += matrix[row][column]; if(totalOfThisRow > maxRow) { maxRow = totalOfThisRow; indexOfMaxRow = row; } } System.out.println("Row " + indexOfMaxRow + " has the maximum sum of " + maxRow);}
随机打乱
for(int i = 0; i < matrix.length; i++) { for(int j = 0; j < matrix[i].length; j++) { int i1 = (int)(Math.random() * matrix.length); int j1 = (int)(Math.random() * matrix[i].length); int temp = matrix[i][j]; matrix[i][j] = matrix[i1][j1]; matrix[i1][j1] = temp; }}
实例练习:数独
public class CheckSudokuSolution { public static void main(String[] args) { //调用 readASolution() 读取数独表格 int[][] grid = readASolution(); System.out.println(isValid(grid) ? " Valid solution" : " Invalid solution "); } //从控制台读取用户输入的答案 public static int[][] readASolution() { Scanner input = new Scanner(System.in); System.out.println("Enter a Sudoku puzzle solution: "); int[][] grid = new int[9][9]; for(int i = 0; i < 9; i++) for(int j = 0; j < 9; j++) grid[i][j] = input.nextInt(); return grid; } //检查答案是否有效 public static boolean isValid(int[][] grid) { for(int i = 0; i < 9; i++) for(int j = 0; j < 9; j++) if(grid[i][j] < 1 || grid[i][j] > 9 || !isValid(i, j, grid) return false; return true; } public static boolean isValid(int i, int j, int[][] grid) { //检查 grid[i][j] 在 i 行中是不是唯一的 for(int column = 0; column < 9; column++) if(column != j && grid[i][column] == grid[i][j]) return false; //检查 grid[i][j] 在 j 列中是否唯一 for(int row = 0; row < 9; row++) if(row != i && grid[row][j] == grid[i][j]) return false; //检查 grid[i][j] 在 3 x 3 格中是否唯一 for(int row = (i / 3) * 3; row < (i / 3) * 3 + 3; row++) for(int col = (j / 3) * 3; col < (j / 3) * 3 + 3; col++) if(row != i && col != j && grid[row][col] == grid[i][j]) return false; return true; }}
多维数组
二维数组由一个一维数组的数组组成,而一个三维数组可以认为是由一个二维数组的数组所组成。
可以对二维数组变量的声明以及二维数组的创建方法进行推广,用于声明 >= 3 的 n 维数组变量和创建 n 维数组。
下述语法声明一个三维数组变量 scores:
double[][][] scores = new double [6][5][2];
实例学习:每日温度和湿度
public class Weather { public static void main(String[] args) { final int NUMBER_OF_DAYS = 10; final int NUMBER_OF_HOURS = 24; double[][][] data = new double[Number_OF_DAYS][NUMBER_OF_HOURS][2]; Scanner input = new Scanner(Sytem.in); for(int k = 0; k < NUMBER_OF_DAYS * NUMBER_OF_HOURS; k++) { int day = input.nextint(); int hour = input.nextInt(); double temperature = input.nextDouble(); double humidity = input.nextDouble(); data[day - 1][hour - 1][0] = temperature; data[day - 1][hour - 1][1] = humidity; } for(int i = 0; i < NUMBER_OF_DAYS; i++) { double dailyTemperatureTotal = 0; double dailyHumidityTotal = 0; for(int j = 0; j < NUMBER_OF_HOURS; j++) { dailyTemperatureTotal += data[i][j][0]; dailyHumidityTotal += data[i][j][1]; } System.out.println("Day " + i + "'s average temperature is " + dailyTemperatureTotal / NUMBER_OF_HOURS); System.out.println("Day " + i + "'s average humidity is " + dailyHumidityTotal / NUMBER_OF_hours); } }}
阅读全文
0 0
- Java学习笔记——多维数组
- Java学习——多维数组
- JAVA学习笔记21——多维数组+数组常用方法
- [学习笔记]多维数组
- java学习笔记5.22多维数组以及对象和类
- C#学习笔记——多维数组与交错数组的区别
- C++学习笔记11——动态数组与多维数组
- java基础——多维数组
- java基础——多维数组
- Java学习:输出任意多维数组(多维数组非矩形)
- C++学习笔记--指针和多维数组
- 【C++学习笔记】11_多维数组
- C++primer学习笔记-----3.6多维数组
- 【python学习笔记】多维数组初始化
- Java——java多维数组和C多维数组的一点小区别
- 学习二维数组——没有多维数组
- 数据结构笔记——第四章字符串和多维数组
- PHP学习笔记之数组和多维数组
- 多线程并发常见问题
- 史上最全SSM框架整合(四)-----测试整合后的SSM框架
- 禁止一个接口有两种用处
- Oracle常用SQL技巧SELECT子句中避免使用
- dubbo结合spring简单快速搭建
- Java学习笔记——多维数组
- android StageFright框架解读
- 使用VS的生成事件命令行指令将生成的exe,dll文件复制到指定文件夹中
- oracle查询关键字的先后顺序
- git退回上一版本
- Android常用开源项目(三十一)
- 通过俄罗斯方块学习Java-1
- java中Integer与int比较浅谈
- 事件处理