数组应用(一维数组、二维数组)

一维数组

声明方式:

  • 数据类型[] 数组名称 = new 数据类型[数组的长度];
  • .length:可以获取数组长度
  • 可以通过下标的方式访问数组中的每一个元素。需要注意的是:数组的下标从0开始,对于长度为n的数组,下标的范围是0~n-1。

初始化方式:

  • 数据类型[] 数组名称 = {初始值1, 初始值2, ...};
  • 基本类型的数组创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false。

内存结构:

栈区:用于存放程序运行过程当中所有的局部变量。
堆区:用于存储使用new关键字创建的数组和对象。

数组的优缺点:

  • 长度一旦确定,就不能更改
  • 通过下标访问元素,很快
  • 要求所有元素类型相同
  • 增删改查需要移动大量元素
练习1:数组的声明与使用
	public static void main(String[] args){
		//实现一维数组的声明和使用
		//int arr[] = new int[2];  两种写法结果是一样的,在java中不推荐第一种方式
		int[] arr = new int[2];  //更容易与变量声明区分
		System.out.println("数组的长度是:" + arr.length);
		System.out.println("下标为0的是:" + arr[0]);
		System.out.println("下标为1的是:" + arr[1]);
		//System.out.println("下标为2的是:" + arr[2]);//运行错误,数组下标越界异常
		
		System.out.println("-------------------------------------");
		//使用for循环打印,更方便
		for(int i =0; i < arr.length; i++){
			System.out.println("下标为" + i + "的是:" + arr[i]);//0
		}
		
		System.out.println("-------------------------------------");
		double[] arr2 = new double[3];
		for(int i =0; i < arr2.length; i++){
			System.out.println("下标为" + i + "的是:" + arr2[i]);//0.0
		}
		
		
		System.out.println("-------------------------------------");
		char[] arr3 = {'a','b','d'};//静态方式的简化版
		for(int i =0; i < arr3.length; i++){
			System.out.println("下标为" + i + "的是:" + arr3[i]);//0.0
		}
		
		System.out.println("-------------------------------------");
		boolean[] arr4 = new boolean[]{true, true,false};//静态写法
		for(int i =0; i < arr4.length; i++){
			System.out.println("下标为" + i + "的是:" + arr4[i]);//0.0
		}
练习2:数组的增删改查
		//赋值11 22 33 44  0
		for(int i=0; i < arr.length-1; i++){
			arr[i]=(i+1)*11;
		}
		for(int i =0; i < arr.length; i++){
			System.out.print(  arr[i] + "  " );//11 22 33 44 0
		}
		System.out.println();
		
		
		System.out.println("-------------------------------------");
		//将数据55插入下标为0的位置,原有数值后移
		for(int i = arr.length-1; i > 0; i--){
			arr[i]=arr[i-1];
			
		}
		arr[0]=55;
		for(int i =0; i < arr.length; i++){
			System.out.print(  arr[i] + "  " );//55 11 22 33 44 
		}
		System.out.println();
		
		
		System.out.println("-------------------------------------");
		//将数据55删除,原有数值前移
		for(int i =0; i < arr.length-1; i++){
			arr[i]=arr[i+1];
			
		}
		arr[4]=0;
		for(int i =0; i < arr.length; i++){
			System.out.print(  arr[i] + "  " );//11 22 33 44 0
		}
		System.out.println();
		
		System.out.println("-------------------------------------");
		//将数据22找到并改为220
		for(int i =0; i < arr.length; i++){
			if(22==arr[i]){
				arr[i]=220;
			}
		}
		for(int i =0; i < arr.length; i++){
			System.out.print(  arr[i] + "  " );//11 220 33 44 0
		}
		System.out.println(); */
		
		//实现一维数组的拷贝
		int arr[]={11,22,33,44,55};
		for(int i =0; i < arr.length; i++){
			System.out.print(  arr[i] + "  " );//0
		}
		System.out.println();
		
		System.out.println("-------------------------------------");
		int brr[]=new int[3];
		for(int i =0; i < brr.length; i++){
			System.out.print(  brr[i] + "  " );//0
		}
		System.out.println();
		
		System.out.println("-------------------------------------");
		//brr[0] = arr[1];
		//brr[1] = arr[2];
		//brr[2] = arr[3];
		
		//for(int i=0;i< brr.length; i++){
			//brr[i]=arr[i+1];
		//}
		
		//将数组arr从下标1开始的3个元素拷贝到数组brr中下标0开始的位置
		System.arraycopy( arr,1,brr,0,3 );
		for(int i =0; i < brr.length; i++){
			System.out.print(  brr[i] + "  " );//0
		}
		System.out.println(); 

练习3:数组工具类的使用

static String toString​(int[] a)
输出数组中的内容
static void fill​(int[] a, int val)
将参数指定元素赋值给数组中所有元素
static boolean equals​(boolean[] a, boolean[] a2)
判断两个数组元素内容和次序是否相同
static void sort​(int[] a)
对数组中的元素进行从小到大排序
static int binarySearch​(int[] a, int key)
从数组中查找参数指定元素所在的位置

 

 

 

 

 

	//声明一个长度为5的数组并初始化
	int []arr2=new int[5];
	Arrays.fill(arr2,10);//填充数组的每个元素
	System.out.println(Arrays.toString(arr2));//10,10,10,10,10
	int []arr3=new int[5];
	Arrays.fill(arr3,20);//填充数组的每个元素
	System.out.println(Arrays.toString(arr3));//20,20,20,20,20
	//判断arr2是否等于arr3
	System.out.println(Arrays.equals(arr2,arr3));//false
 		//使用数组来记录学生的考试成绩并打印
		//1、提示用户输入学生的人数并使用变量记录
		System.out.println("请学生人数:");
		Scanner sc =new Scanner(System.in);
		int num =sc.nextInt();
		//2、根据学生的人数来声明对应长度的数组负责记录学生的考试成绩
		//变长数组:变量作为数组长度,但长度依然不可变
		int[] arr=new int[num];
		//3、提示用户输入每个学生的考试成绩并记录一堆数组中
		for(int i =0; i < num; i++){
			System.out.println("请输入第" + (i+1) +"个学生的考试成绩:" );
			arr[i]=sc.nextInt();//读取
		}
		//4、打印所有学生的考试成绩
		System.out.println( "学生考试成绩分别为:" );
		for(int i =0; i < arr.length; i++){
			System.out.print(arr[i] + " ");
		}
		
		//5、计算所有学生的总分以及平均分
		int sum=0;
		for(int i =0; i < arr.length; i++){
			sum+=arr[i];
		}
		double svg=sum*1.0/num;//布尔类型并*1.0,为了保留小数点后的数值
		System.out.println("总分:" + sum +"  平均分:" + svg ); 
		
		System.out.println("-------------------------------------");
		//1、查找本班所有学生考试成绩中的最低分和最高分并打印出来
		System.out.println("原始考试成绩是:" + Arrays.toString(arr));
		//调试工具类中的排序方法对所有考试成绩从小到大排序
		Arrays.sort(arr);
		System.out.println("排序后成绩是:" + Arrays.toString(arr));
		System.out.println("最低分是:" + arr[0] + ",最高分是:" + arr[num-1]);
		
		System.out.println("-------------------------------------");
		//从数组中查找指定元素所在的下标位置
		System.out.println("59分在数组下标位置是:" + Arrays.binarySearch(arr,59));
		System.out.println("60分在数组下标位置是:" + Arrays.binarySearch(arr,60));

二维数组

  • 由多个一维数组组成。
  • 数据类型[][] 数组名称 = new 数据类型[行数][列数];
  • 数据类型[][] 数组名称 = {{元素1, 元素2,...}, ...};
	//使用二维数组打印杨辉三角
	//1、提示用户输入行数
	System.out.println("请输入一个行数:");
	Scanner.s =new Scanner(System.in);
	int num =SC.nextInt();
	
	//2、根据用户输入行数来声明对应分二维数组
	int[][] arr =new int [num][];
	
	//3、针对二维数组中的每个元素进行初始化
	//使用外层for循环控制二维数组的行下标
	for(int i = 0;i<num; i++){
		//针对二维数组中的每一行进行内层空间申请
		arr[i]=new int[i+1];
		//使用内层循环控制列下标
		for(int j = 0; j<=i; j++){
			//当下标为0或者列下标等于行下标,都为
			if(0==j || i==j){
				arr[i][j] =1;
			}else{
				//否则对应位置就是上一行当前列+上一行前一列的和
				arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
			}
		}
	}
	//4、打印
	for(int i=0;i<arr.length;i++){
	//使用内层循环控制列数
		for(int j=0;j<arr[i].length;j++){
			System.out.print(arr[i][j]+" ");
		}
	System.out.println();
	}
	
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值