------- 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();
}
}