
quad 首先,必须声明数组变量,才能在程序中使用数组。声明数组变量的语法:dataType[] arrayRefVar;或 dataType arrayRefVar[];,其中 dataType 为数据类型,arrayRefVar 为数组变量名。
quad 注:建议使用 dataType[] arrayRefVar 的声明风格声明数组变量。dataType arrayRefVar[] 风格是来自 C/C++ 语言 ,在 Java 中采用是为了让 C/C++ 程序员能够快速理解 Java 语言。
2.2 数组的创建Java 语言使用 new 关键字来创建数组,语法:arrayRefVar = new dataType[arraySize];。这个语句做了两件事:
你还可以使用直接赋值数组的方式创建数组:dataType[] arrayRefVar = {value0, value1, ..., valuek};,其中 value0, value1, ..., valuek 为数组中存储的数据。
数组的声明和创建可以用一条语句完成:dataType[] arrayRefVar = new dataType[arraySize];
quad 数组的元素是通过索引访问的。数组索引从 0 开始,所以索引值从 0 到 arrayRefVar.length-1,其中 arrayRefVar.length 返回数组的长度。如果索引不在 [0,arrayRefVar.length-1] 范围,则报 ArrayIndexOutOfBoundsException 数组下标越界异常。
3.1 Java 内存(简要分析)
quad
数组在 Java 内存存储的情形大致如下:
quad Java 数组必须先初始化,然后才可以被使用。所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
3.2.1 静态初始化public class Demo01 {
public static void main(String[] args) {
// 初始化数组
int[] array = {10,20,30,40,50,60,70,80,90};
// foreach循环
for (int num : array) {
System.out.println(num);
}
}
}
public class Demo02 {
public static void main(String[] args) {
double[] array = new double[100];
// 为数组赋值随机数
for (int i = 0; i < array.length; i++) {
array[i] = Math.random() * 100;
// 每五个数字换一行
if (i != 0 && i % 5 == 0){
System.out.println();
}
System.out.print(array[i]+"t");
}
double[] minMax = minMax(array);
System.out.println("nt数组的最小值为:"+minMax[0]+",最大值为:"+minMax[1]);
}
// 找出数组中的最大值与最小值
public static double[] minMax(double[] array) {
double min = array[0];// 假设数组第 0 个元素为最小值
double max = array[9];// 假设数组第 9 个元素为最大值
for (double num : array) {
if (min > num) {// 找到数组最小值
min = num;
}
if (max < num) {// 找到数组最大值
max = num;
}
}
return new double[]{min,max};
}
}
quad 多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。注:多维数组的每个数组元素的长度可以不一致。
quad 多维数组与一维数组相同,都是通过索引对元素进行访问的。以二维数组为例:array[2][3]即访问 array 数组第 2 行第 3 列的元素。
4.1 初始化 4.1.1 静态初始化public class Demo04 {
public static void main(String[] args) {
int[][] numArray = new int[2][];
numArray[0] = new int[3];
numArray[0][0] = 1;
numArray[0][1] = 2;
numArray[0][2] = 3;
numArray[1] = new int[]{4,5,6,7,8};
for (int[] array : numArray) {
for (int num : array) {
System.out.print(num + ",");
}
System.out.println();
}
}
}
public class Demo06 {
public static void main(String[] args) {
// 创建一个二维数组 11 * 11。其中,0:没有棋子,1:白棋,2:黑棋
int[][] array = new int[11][11];
array[1][2] = 1;
array[2][3] = 2;
// 打印原始数组
printArray(array,"原始数组:");
// 获取非零元素个数
int num = nonZero(array);
// 原始数组转为稀疏数组
int[][] sparseArray = originalToSparse(array, num);
printArray(sparseArray,"稀疏数组:");
// 稀疏数组转为原始数组
int[][] originalArray = sparseToOriginal(sparseArray);
printArray(originalArray,"原始数组:");
}
// 获取原始数组非零元素个数
public static int nonZero(int[][] originalArray) {
int num = 0;
for (int[] numArray : originalArray) {
for (int i : numArray) {
if (i != 0) {
num++;
}
}
}
System.out.println("一共有 "+num+" 个有效数字");
return num;
}
// 稀疏数组转换为原始数组
public static int[][] sparseToOriginal(int[][] sparseArray) {
int[][] originalArray = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
originalArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
return originalArray;
}
// 原始数组转换为稀疏数组
public static int[][] originalToSparse(int[][] array, int num) {
int[][] sparseArray = new int[num+1][3];
int line = 0;
sparseArray[line] = new int[]{array.length, array.length, num};
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
if (array[i][j] != 0 && line < num) {
sparseArray[++line] = new int[]{i,j,array[i][j]};
}
}
}
return sparseArray;
}
// 打印数组
public static void printArray(int[][] array, String str) {
System.out.println(str);
for (int[] numArray : array) {
for (int i : numArray) {
System.out.print(i+"t");
}
System.out.println();
}
}
}