1. 数组的初始化
数组有两种初始化方式:动态初始化、静态初始化
两种初始化方式不能同时使用,即:不能在给定数组长度的同时给定初始化值
1.动态初始化
只指定长度,由jvm给定初始值
格式:数据类型[] 数组名 = new 数据类型[数组长度];
2.静态初始化
给定初始值,由jvm确定长度
格式:数据类型[] 数组名 = new 数据类型[]{元素1,,元素2,...};
不同数据类型的默认初始值:
数据类型 | 初始值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0 |
boolean | false |
char | ‘/u0000’(null) |
引用类型 | null |
3.一维数组逆序
思路:
- 将0索引与length-1索引数据交换;
- 将1索引与length-2索引数据交换;
- 一直交换到length/2索引即可
int[] arr = new int[]{1, 2, 3, 4, 5};
//方式一
for (int i = 0; i < arr.length / 2; i++) {
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - i - 1] = temp;
}
//5 4 3 2 1
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
//方式二
for (int start = 0, end = arr.length - 1; start < end; start++, end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//1 2 3 4 5
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
4. 整形数据转换为数组
思路:
- 键盘录入需要转换数据n的值
- 定义一个数组(数组长度根据需求确定)
- 依次获取数据n每一位的值存入数组
- 数组逆序
- 遍历打印数组
测试代码如下:
import java.util.Scanner;
public class Math {
public static void main(String[] args) {
//1.键盘录入需要转换数据n的值
Scanner in = new Scanner(System.in);
System.out.print("请输入一个整数(不超过8位):");
int n = in.nextInt();
//2.定义一个数组(数组长度根据需求确定)
int[] arr = new int[8];
//定义数组中装入整数的位数
int index = 0;
/*
3.依次获取数据每一位的值存入数组
循环条件使用n>0
当n=0时,即表示该整数每一位的值都已存入数组
*/
while (n > 0) {
/*
假定n=123456
每一次循环后数组中装入的值:
arr[0]=6,arr[1]=5,arr[2]=4,
arr[3]=3,arr[4]=2,arr[5]=1
*/
arr[index] = n % 10;
//每一次循环后index的值:1,2,3,4,5,6
index++;
/*
假定n=123456
每一次循环后n的值:
12345,1234,123,12,1,0
*/
n /= 10;
}
//4.数组逆序
for (int start = 0, end = index - 1; start < end; start++, end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
//5.遍历打印数组
for (int i = 0; i < index; i++) {
System.out.print(arr[i] + " ");
}
}
}
/**
* 测试结果如下:
* 请输入一个整数(不超过8位):123456
* 1 2 3 4 5 6
*/
2. 二维数组
元素为一维数组的数组
1. 二维数组的定义格式
-
数据类型[][] 数组名 = new 数据类型[m][n];
定义一个含有m个一维数组,每个一维数组含有n个元素的二维数组
-
数据类型[][] 数组名 = new 数据类型[m][];
可以动态地给出每个一维数组的元素个数 示例: int[][] arr = new int[3][]; arr[0] = new int[1]; arr[1] = new int[2]; arr[3] = new int[3];
-
数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2,…},{元素1,元素2,…},{元素1,元素2,…},…};
2. 二维数组元素的获取
通过 数组名[m][n] 获取第m+1个一维数组的第n+1个元素
示例:
int[][] arr = new int[][]{{1, 2, 3}, {11, 22}, {111, 222, 333, 444}};
//arr[2][2]=333
System.out.println("arr[2][2]=" + arr[2][2]);
3. 获取n行杨辉三角
杨辉三角示例:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
... ... ... ... ... ... ...
思路:
- 键盘录入n的值
- 定义一个行数和列数都为n的二维数组;
- 将该二维数组每一行的第一列和最后一列赋值为1;
- 从第三行开始,除了首尾,其余每一个数据都是其上一行的前一列和本列之和;
- 遍历该二维数组
测试代码如下:
import java.util.Scanner;
public class Math {
public static void main(String[] args) {
//1.键盘录入n的值
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = in.nextInt();
//2.定义一个行数和列数都为n的二维数组
int[][] arr = new int[n][n];
//外层循环获取每个一维数组,内层循环设置一维数组中相关元素的值
for (int i = 0; i < arr.length; i++) {
//第n行有n个数据,所以只需j<=i即可
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
//3.将该二维数组每一行的第一列和最后一列赋值为1
arr[i][j] = 1;
} else {
//4.从第三行开始,除了首尾,其余每一个数据都是其上一行的前一列和本列之和
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
}
//5.遍历该二维数组
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
/**
* 测试结果如下:
* 请输入一个整数:6
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
*/