java基础之数组(2)

本文详细介绍了Java数组的基础知识,包括使用二维数组打印杨辉三角,数值型数组的统计计算,数组的复制、反转和查找算法(线性和二分查找),冒泡排序的实现。同时,探讨了Arrays工具类的使用以及数组中可能遇到的异常,如ArrayIndexOutOfBoundsException和NullPointerException。
摘要由CSDN通过智能技术生成

一、数组中涉及到的常见算法

二、Arrays工具类的使用

三、数组中常见的异常


一、数组中涉及到的常见算法

1.使用二维数组打印一个 10 行杨辉三角

【提示】

  1. 第一行有 1 个元素, 第 n 行有 n 个元素
  2. 每一行的第一个元素和最后一个元素都是 1
  3. 从第三行开始, 对于非第一个元素和最后一个元
    素的元素。即: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引用没有指向实体,却在操作实体中的元素时。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值