目录
数组
一维数组的使用
如何调用数组指定位置的元素
如何获取数组的长度,如何遍历数组
数组的默认初始化值
数组的内存解析
一维数组的内存解析
二维数组的使用
二维数组的声明和初始化
如何调用数组指定位置的元素
获取二维数组的长度
遍历二维数组
二维数组的数组元素的默认初始值
二维数组的内存解析
数组中涉及常见的算法
一维数组和二维数组的例子
3.面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
4.回形数格式方的实现
数组的复制
数组的反转
查找(或搜索)
排序算法
Arrays工具类的使用
数组使用中的常见异常
数组
一维数组的使用
如何调用数组指定位置的元素
如何获取数组的长度,如何遍历数组
-
数组一旦初始化,其长度是确定的
-
长度一旦确定就无法修修改
数组的默认初始化值
数组的内存解析
一维数组的内存解析
二维数组的使用
二维数组的声明和初始化
如何调用数组指定位置的元素
获取二维数组的长度
遍历二维数组
二维数组的数组元素的默认初始值
二维数组的内存解析
数组中涉及常见的算法
一维数组和二维数组的例子
-
上图中,x是一维数组,y是二维数组;
2.
3.面试题目:创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同
class ArrayExer {
public static void main(String[] args) {
//方式一:
// int[] arr = new int[6];
// for (int i = 0; i < arr.length; i++) {
// arr[i] = (int) (Math.random() * 30) + 1;// [0,1) [0,30) [1,31)
//
// boolean flag = false;
// while (true) {
// for (int j = 0; j < i; j++) {
// if (arr[i] == arr[j]) {
// flag = true;
// break;
// }
// }
// if (flag) {
// arr[i] = (int) (Math.random() * 30) + 1;
// flag = false;
// continue;
// }
// break;
// }
// }
//
// for (int i = 0; i < arr.length; i++) {
// System.out.println(arr[i]);
// }
//方式二:
int[] arr = new int[6];
for (int i = 0; i < arr.length; i++) {// [0,1) [0,30) [1,31)
arr[i] = (int) (Math.random() * 30) + 1;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
i--;
break;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
4.回形数格式方的实现
//方式一
class RectangleTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入一个数字");
int len = scanner.nextInt();
int[][] arr = new int[len][len];
int s = len * len;
int k = 1;
int i = 0, j = 0;
for (int m = 1; m <= s; m++) {
if (k == 1) {
if (j < len && arr[i][j] == 0) {
arr[i][j++] = m;
} else {
k = 2;
i++;
j--;
m--;
}
} else if (k == 2) {
if (i < len && arr[i][j] == 0) {
arr[i++][j] = m;
} else {
k = 3;
i--;
j--;
m--;
}
} else if (k == 3) {
if (j >= 0 && arr[i][j] == 0) {
arr[i][j--] = m;
} else {
k = 4;
i--;
j++;
m--;
}
} else if (k == 4) {
if (i >= 0 && arr[i][j] == 0) {
arr[i--][j] = m;
} else {
k = 1;
i++;
j++;
m--;
}
}
}
// 遍历
for (int m = 0; m < arr.length; m++) {
for (int n = 0; n < arr[m].length; n++) {
System.out.print(arr[m][n] + "t");
}
System.out.println();
}
}
}
//方式二
class RectangleTest1 {
public static void main(String[] args) {
int n = 7;
int[][] arr = new int[n][n];
int count = 0; // 要显示的数据
int maxX = n - 1; // x轴的最大下标
int maxY = n - 1; // Y轴的最大下标
int minX = 0; // x轴的最小下标
int minY = 0; // Y轴的最小下标
while (minX <= maxX) {
for (int x = minX; x <= maxX; x++) {
arr[minY][x] = ++count;
}
minY++;
for (int y = minY; y <= maxY; y++) {
arr[y][maxX] = ++count;
}
maxX--;
for (int x = maxX; x >= minX; x--) {
arr[maxY][x] = ++count;
}
maxY--;
for (int y = maxY; y >= minY; y--) {
arr[y][minX] = ++count;
}
minX++;
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length; j++) {
String space = (arr[i][j] + "").length() == 1 ? "0" : "";
System.out.print(space + arr[i][j] + " ");
}
System.out.println();
}
}
}
数组的复制
数组的反转
查找(或搜索)
线性查找
注意:equals()和==的区别
二分法查找
前提:所查找的数组必须有序
排序算法
Arrays工具类的使用
import java.util.Arrays; //导入Arrays工具类
public class test {
public static void main(String []args) {
int[] num = {21, 32, 44, 56, 78, 98};
//二分法查找
int index = Arrays.binarySearch(num, 56); //调用工具类中带有的二分法
System.out.println(index); //找到的下标"
//数组内容转字符串输出
System.out.println(Arrays.toString(num));
//数组排序
int[] nums = {34, 65, 13, 35, 99, 56};
Arrays.sort(nums); //快速排序法
System.out.println(Arrays.toString(nums)); //转成字符串输出
// 数组的复制
int[] num3 = Arrays.copyOf(nums, 10); // 将数组nums的内容复制进来,多余的位置空着用int类型的默认值0补齐
System.out.println(Arrays.toString(num3));
}
}
// Tips:关于数组的复制,效率由高到低的排序是:System.arraycopy -> Arrays.copyOf -> for循环
数组使用中的常见异常



