数组的定义:
数组即为同一种类型的数据的集合,其实数组就是一个容器;
数组的好处:
可以自动给数组中的元素从0开始编号,方便操作这些元素,(即为数组中存放的每一个元素赋以了自然顺序相对应的角标)。
数组定义时的第一种格式:
元素类型[] 数组名 = new 元素类型[数组中需要存放的元素个数];
示例:int[] arr = new int[5];
//int[5]代表的是arr这个数组的长度,即arr里将要存放5个int类型的数据。
数组定义时的第二种格式:
元素类型 [] 数组名 = new 元素类型[]{元素,元素,元素,……};
示例:int[] arr = new int[]{3,5,1,9};
int [] arr = {3,5,7,9};
注:数组被创建时就默认赋予了初始值,
int型数组默认值是0;(即int型数组中所有元素的初始值都为0);
double型数组默认值是0.0;
float型数组默认值是0.0f;
boolean型数组默认值是false;
示例:int[] arr = new int[5];arr[0] = 59;//表示将59赋值给了数组arr中角标为0的元素。
当arr = null;时,表示将数组arr置为空,arr为空后将释放堆区中的数组空间;
new int[5];表示在堆区开辟出了数组空间,同时将空间地址赋值给了栈区中的arr,栈区arr得到的是数组空间在堆区的地址,而不是数组的值。
数组在使用中的异常:
ArrayIndexoutofBoundsException:数组角标越界异常;操作数组时,访问到了数组中不存在的角标时,就会抛出该异常;
NullpoiterException:空指针异常,当引用没有任何指向,同时值为null的情况下,该引用还在用于操作实体,数组指向为空,没有任何引用对象造成的异常。
数组的操作:
获取数组中的元素,通常会用到遍历;
数组中有一个属性可以直接获取到数组元素的个数,名词为:length;
length的使用方法为:数组名称点上 length;比如:arr.length;表示取得数组arr的元素个数(即arr数组的长度);
例题:
1、获取数组中最大值:
public static int getMax(int [] arr) //getMax(int [] arr);接收的形式参数为一个int数组;
{
int max = arr[0]; //将数组arr的0角标中存放的元素赋给max;
for (int x= 1;x<arr.length;x++) //使用for循环来遍历数组;
{
if (arr[x] > max) //如果数组1角标中的元素大于数组0角标中的元素,
max = arr[x]; //那么就把数组1角标中的元素赋给max;
}
return max; //for遍历完数组后,将max中记录的最大值返回给调用者。
}
2、对给定数组进行排序:
public stativ void selectsort(int[] arr) // selectsort(int[] arr);接收一个int数组;
{
//使用嵌套for循环;(即大圈套小圈)
for (int x= 0;x<arr.length-1;x++) //外圈for从0角标开始遍历;
{
//内圈for从外圈for的下一位元素开始遍历;
for (int y= x+1;y<arr.length;y++) //x+1的角标便是下一个元素的角标
{
//如果x角标元素大于y角标元素,就执行if 语句中的代码;
if (arr[x] > arr[y])
{
//换位操作,把数组中最大的元素向后移。把最小的元素向前移。
int temp = arr[x];//定义一个变量temp用来记录x角标中的元素;
arr[x] = arr[y];//把y角标中的元素赋给x角标;
arr[y] = temp;//把temp的值赋给y角标;
}
}
}
}
冒泡排序:
public static void bublesort(int[] arr)
{
for(int x= 0;x<arr.length-1;x++)
{
//减x是让第一次比较的元素减少,减1是避免角标越界;
for (int y= 0;y<arr.length-x-1;y++)
{
if (arr[y] < arr[y+1])
{
//换位操作,
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
二维数组:
示例:int[][] arr = new int [3][4];
//定义了名称为arr的二维数组,二维数组中有三个一维数组,每一个一维数组中有四个元素;一维数组的名称分别为arr[0],arr[1],arr[2];
如果要给第一个一维数组的“1”角标位赋值为78的写法是:arr[0][1] = 78;
二维数组的第二种写法格式:
示例:int[][] arr = new int[3][];
//二维数组中有3个一维数组,每个一维数组都是默认初始化值null;而且可以对这三个一维数组分别进行初始化;
例如:
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[5];
例题:遍历二维数组并求和
class Array2Demo
{
public static void main(String[] args) //主函数
{
int[][] arr = {{3,2,4,1},{5,4,5},{6,4,7,1,8,4},{4,2,4}}; //定义一个二维数组arr
bl(arr);
int index = getAdd(arr);
System.out.println("二维数组的和是:"+index);
}
public static void bl(int[][] arr) //遍历二维数组
{
for (int x=0; x<arr.length; x++)
{
System.out.print("arr["+x+"]={");
for (int y=0; y<arr[x].length; y++)
{
System.out.print(arr[x][y]);
}
System.out.println("}");
}
}
public static int getAdd(int[][]arr)//二维数组求和
{
int temp = 0; //定义一个变量用来存放二维数组元素相加的和;
for (int x=0; x<arr.length; x++)
{
for (int y=0; y<arr[x].length; y++)//嵌套for循环遍历二维数组中的每一个元素
{
//遍历到一个元素,便和temp相加一次,并把相加的和重新赋给temp,//方便temp继续和下一个元素相加.
temp = temp + arr[x][y];
}
}
return temp;
}
}