黑马程序员-一维数组和二维数组

本文详细介绍了数组的概念、一维数组和二维数组的定义及使用方法,并提供了获取数组最值、索引值等实用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------- android培训java培训、期待与您交流! ----------


数组是 一个存放同一种数据类型的集合,它是一个容器

数组对其中的元素默认从0开始编号,方便对元素的操作

一维数组:
格式:
    1.数据类型[] 变量名 = new 数据类型[数组长度];
          int[] arr = new int[5];
    2.数据类型[] 变量名 = new 数据类型[]{元素1,元素2,元素3...};
          int[] arr = new int[]{3,10,4,5,23};
    3.数据类型[] 变量名 = {元素1,元素2,元素3...};
          int[]  arr = {39,25,10,49};

注意:
在操作数据的时候注意数组的角标,以防越界和空指针的问题
//访问到了数组中的不存在的脚标时,发生角标越界
int[] arr = new int[2];
System.out.println(arr[3]);

//arr引用没有指向实体,却在操作实体中的元素时,发生空指针异常
int[] arr = null;
System.out.println(arr[0]);

练习:
/*
	获取最值(最大值,最小值)
	在一个数组中找到一个值所对应的索引
*/
class Demo 
{
	public static void main(String[] args) 
	{
		//1.获取最值(最大值,最小值)
		int [] arr1 = {321,4,432,5,6546,54,654,2,432,21};
		
		System.out.println("max = " + getMax(arr1));
		System.out.println("min = " + getMin(arr1));
		
		System.out.println("index = " + getIndex(arr1,432));
	}
	//求数组的最大值
	public static int getMax(int[] arr)
	{
		int max = arr[0];
		for (int i = 0;i<arr.length ;i++ )
		{
			max = max > arr[i]? max : arr[i];
		}
		return max;
	}
	
	//求数组的最小值
	public static int getMin(int[] arr)
	{
		int min = arr[0];
		for (int i = 0;i<arr.length ;i++ )
		{
			min = min < arr[i]? min : arr[i];
		}
		return min;
	}
	//找一个数的索引
	public static int getIndex(int[] arr,int num)
	{
		int index=0;
		for (int i=0;i<arr.length ;i++ )
		{
			if (arr[i]==num)
			{
				index = i;
			}
		}
		return index;
	}
}

二维数组:
格式:
    1.数据类型[][] 变量名 = new 数据类型[数组长度][每个数组中的元素个数];
         int[][] arr = new int[3][2];//有3个一维数组,一维数组中有两个元素
    2.数据类型[][] 变量名 = new 数据类型[数组长度][];//可以先不写每个数组中的元素个数,然后在对每个一位数组中的元素分别进行初始化
         int[][] arr = new int[3][];
         int[0] = new int[3];//第一个一维数组中有3个元素
         int[1] = new int[2];//第二个一维数组中有2个元素
         int[2] = new int[4];//第三个一维数组中有4个元素
    3.数据类型[][] 变量名 = {{数组1},{数组2},{数组3}...};
         int[][] arr =  {{3,4,1},{5,2},{10,43,9,25}};//二维数组中有三个一位数组,每个一维数组均已初始化
注意:
特殊情况的写法:  int[] x,y[]; x是一维数组,y是二维数组。

练习:
class Demo
{
	public static void main(String[] args) 
	{
		int[][] arr = {{89,86,90,88,99},
					   {77,95,63,77,89},
					   {88,82,78,45,88},
					   {90,90,65,98,94}};
		//第一次考试,所以同学的平均分
		int sum = 0;
		//遍历第一行求和求平均
		for (int i = 0;i<arr[0].length ;i++ )
		{
			sum += arr[0][i];
		}
		System.out.println("第一次考试的平均分:"+ sum / arr[0].length);
		
		//求刘德华同学四次考试的平均分
		sum = 0;	//sum归零
		//遍历第一列,求和求平均
		for (int i = 0;i<arr.length ;i++ )
		{
			sum += arr[i][0];
		}
		System.out.println("刘德华第一次考试的平均分:"+ sum / arr.length);
		//求所有同学所有考试的最高分\最低分
		//假设最高分\最低分是数组中的第一个元素
		int max = arr[0][0];
		int min = arr[0][0];
		//便利所有元素,求最值
		for (int i = 0;i<arr.length ;i++ )
		{
			for (int j = 0;j<arr[i].length ;j++ )
			{
				max = max > arr[i][j] ? max : arr[i][j];
				min = min < arr[i][j] ? min : arr[i][j];
			}
		}
		System.out.println("最高分是:" + max);
		System.out.println("最低分是:" + min);
	}
}

综合练习:
/*
	某公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
	
	首先将数据倒序;
	然后将每位数字都加上5,再用和除以10的余数代替该数字;
	然后将第一位数字和最后一位数字交换。
	请任意给定一个小于8位的整数,然后把加密后的结果在控制台打印出来。
	87362
	思路:
	1.将这个数的每一位取出来。
		87362 % 10 = 2;
		87362 / 10 =8736;
		8736 % 10 = 6;
		8736 /10 = 873;
		...
	2.建立数组,方便对每个数的操作
	3.将每个数加到数组中
	4.按要求进行题目的操作
	5.从数组中打印这个数即可
*/
class Demo
{
	public static void main(String[] args) 
	{
		printNum(87362);
	}
	public static void printNum(int a)
	{
//		int a = 87362;
		int b = a;	//将a赋值给b,如果用a来判断,a的值会被改变
		int count =0;	//记录a是几位数,从而确定数组的长度
		for (int i =0; ;i++ )
		{
			if (b!=0)
			{
				b=b/10;
				continue;
			}
			count = i;
			break;
			
		}
		//System.out.println(count);
		int[] arr = new int[count];
		
		for (int i = 0;i<arr.length ;i++ )
		{
			int num = a%10;
			a = a/10;
			arr[i] = num;
//			System.out.println(a);
		}
//		printArray(arr);
		for (int i=0;i<arr.length ;i++ )
		{
			arr[i] = (arr[i]+5)%10;
		}
//		printArray(arr);
		arr[0] = arr[0]^arr[4];
		arr[4] = arr[0]^arr[4];
		arr[0] = arr[0]^arr[4];
		printArray(arr);
	}
	public static void printArray(int[] arr)
	{
		for (int i=0;i<arr.length ;i++ )
		{
			System.out.print(arr[i]);
		}
		System.out.println();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值