一、数组中涉及到的常见算法
二、Arrays工具类的使用
三、数组中常见的异常
一、数组中涉及到的常见算法
1.使用二维数组打印一个 10 行杨辉三角
【提示】
- 第一行有 1 个元素, 第 n 行有 n 个元素
- 每一行的第一个元素和最后一个元素都是 1
- 从第三行开始, 对于非第一个元素和最后一个元
素的元素。即:yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
public class ArrayTest1 {
public static void main(String[] args) {
//1.声明初始化二维数组
int[][] yanghui=new int[10][];
//2.给数组的元素赋值
for (int i = 0; i < yanghui.length; i++) {
yanghui[i]=new int[i+1];
//2.1给首末元素赋值
yanghui[i][0]=yanghui[i][i]=1;
//2.2给每行的非首末元素赋值
for (int j = 1; j < yanghui[i].length -1; j++) {
yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
}
}
//3.遍历二维数组
for (int i = 0; i < yanghui.length; i++) {
for (int j = 0; j < yanghui[i].length; j++) {
System.out.print(yanghui[i][j]+ " ");
}
System.out.println();
}
}
}
2. 求数值型数组中元素的最大值、最小值、平均数、总和等
/*求数值型数组中元素的最大值、最小值、平均数、总和等
*
* 定义一个int型的一堆数组,包含10个元素,分别赋一些随机整数;
* 然后求出所有元素的最大值.最小值,总和,平均值,并输出出来.
* 要求:所有随机数都是两位数.
*
* [10,99]
* 公式:(int)(Math.random() * (99 - 10 + 1) + 10)
*/
public class ArrayTest2 {
public static void main(String[] args) {
int[] arry=new int[10];
for (int i = 0; i < arry.length; i++) {
arry[i]=(int)(Math.random() * (99 - 10 + 1) + 10);
}
//遍历
for (int i = 0; i < arry.length; i++) {
System.out.print(arry[i] + "\t");
}
System.out.println();
//求数组元素的最大值
//int MaxValue = 0;
int MaxValue = arry[0];
for (int i = 1; i < arry.length; i++) {
if (MaxValue < arry[i]) {
MaxValue = arry[i];
}
}
System.out.println("最大值为:" + MaxValue);
//求数组元素的最小值
int MinValue = arry[0];
for (int i = 1; i < arry.length; i++) {
if (MinValue > arry[i]) {
MinValue = arry[i];
}
}
System.out.println("最小值为:" + MinValue);
//求数组元素的总和
int sum=0;
for (int i = 0; i < arry.length; i++) {
sum+=arry[i];
}
System.out.println("总和为:"+ sum);
//求数组元素的平均值
int avgValue=sum/arry.length;
System.out.println("平均值为:"+ avgValue);
}
}
3. 数组的复制、反转、查找(线性查找、二分法查找)
数组的复制、反转
public class ArrayTest3 {
public static void main(String[] args) {
String[] arr1=new String[]{"GG","MM","JJ","DD","AA","BB"};
//数组的复制(区别于数组变量的赋值)
String[] arr2=new String[arr1.length];
for (int i = 0; i < arr2.length; i++) {
arr2[i]=arr1[i];
System.out.print(arr2[i] + "\t");
}
//数组的反转
//方法一:
// for(int i=0;i<arr1.length / 2;i++) {
// String temp = arr1[i];
// arr1[i] = arr1[arr1.length -i -1];
// arr1[arr1.length -i -1] = temp;
// }
//方法二:
for (int i = 0, j = arr1.length -1; i < j;i++,j--) {
String temp = arr1[i];
arr1[i] = arr1[j];
arr1[j] = temp;
}
//遍历
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + "\t");
}
}
}
数组的查找(线性查找、二分法查找)
//数组的查找(线性查找、二分法查找)
public class ArrayTest4 {
public static void main(String[] args) {
//查找(或搜索)
//线性查找:
String[] arr=new String[]{"GG","MM","JJ","DD","AA","BB"};
String dest ="AA";
boolean isFlag=true;
for(int i = 0; i < arr.length; i++) {
if(dest.equals(arr[i])) {
System.out.println("找到指定元素,位置为:" + i);
isFlag = false;
break;
}
}
if(isFlag) {
System.out.println("很遗憾,没有找到");
}
//二分法查找
//前提:所要查找的数组必须有序
int[] arr2=new int[] {-98,-50,-33,2,30,66,105,210,333};
int dest1 = 66;
int head = 0;//初始的首索引
int end = arr2.length - 1;//初始的末索引
boolean isFlag1 = true;
while (head <= end) {
int middle = (head + end)/2;
if(dest1 ==arr2[middle]) {
System.out.println("找到指定元素,位置为:" + middle);
break;
}else if(arr2[middle] > dest1) {
end = middle -1;
}else { //arr2[middle] < dest1
head = middle + 1;
}
}
if(isFlag) {
System.out.println("很遗憾,没有找到");
}
}
}
4.冒泡排序的实现
public class BubbleSortTest {
//从小到大排序
public static void main(String[] args) {
int[] arr=new int[] {32,-56,12,34,-90,45,21,78,45,67};
//冒泡排序
for(int i = 0;i < arr.length - 1;i++) {
for(int j = 0;j < arr.length - 1 - i;j++) {
if(arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
二、Arrays工具类的使用
import java.util.Arrays;
/*
* Arrays工具类的使用
* java.util.Arrays: 操作数组的工具类,里面定义到了很多操作数组的方法
*/
public class ArraysTest {
public static void main(String[] args) {
//1.boolean equals(int[] a,int[] b):判断两个数组是否相等
int[] arr1=new int[] {1,2,3,4};
int[] arr2=new int[] {1,3,2,4};
boolean isequals = Arrays.equals(arr1, arr2);
System.out.println(isequals);//false
//2.String toString(int[] a):输出数组信息
System.out.println(Arrays.toString(arr1));//[1, 2, 3, 4]
//3.void fill(int[] a,int val):将指定值填充到数组之中
Arrays.fill(arr1, 10);
System.out.println(Arrays.toString(arr1));//[10, 10, 10, 10]
//4.void sort(int[] a):对数组进行排序
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));//[1, 2, 3, 4]
//5.int binarySearch(int[] a,int key): 对排序后的数组进行二分法检索指定的值
int[] arr3=new int[] {-66,-23,21,45,56,79,80,98,122};
int index=Arrays.binarySearch(arr3, 80);//6
if(index>=0) {
System.out.println(index);
}else {
System.out.println("未找到");
}
}
}
三、数组中常见的异常
编译时,不报错!!!
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[2]);
System.out.println(arr[-1]);
//访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
//arr引用没有指向实体,却在操作实体中的元素时。