数组定义方法
数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。
格式:type arrayName[ ]; type[ ] arrayName;
其中类型(type)可以为Java中任意的数据类型,包括简单类型组合类型,数组名arrayName为一个合法的标识符,[]指明该变量是一个数组类型变量。
数组初始化
1.动态初始化:数组定义与为数组分配空间和赋值的操作分开进行;
2.静态初始化:在定义数字的同时就为数组元素分配空间并赋值;
3.默认初始化:数组是引用类型,它的元素相当于类的成员变量,因此数组分配空间后,每个元素也被
按照成员变量的规则被隐式初始化。
实例:TestD.java(动态)
- public class TestD
- {
- public static void main(String args[]) {
- int a[] ;
- a = new int[3] ;
- a[0] = 0 ;
- a[1] = 1 ;
- a[2] = 2 ;
- Date days[] ;
- days = new Date[3] ;
- days[0] = new Date(2008,4,5) ;
- days[1] = new Date(2008,2,31) ;
- days[2] = new Date(2008,4,4) ;
- }
- }
TestS.java(静态):
- public class TestS
- {
- public static void main(String args[]) {
- int a[] = {0,1,2} ;
- Time times [] = {new Time(19,42,42),new Time(1,23,54),new Time(5,3,2)} ;
- }
- }
数组操作中常见的错误
ArrayIndexOutOfBoundsException:3:操作时,访问到了数组中不存在的角标
NullPointerException:空指针异常;当引用没有任何指向值为null的情况,该引用还在用于操作实体。
[I@36db4bcf 当显示这个是 是把数组中的地址打印出来了@后面为数组地址
例如:System.out.println(arr);arr是一个数组名,arr本身代表数组首地址,严格说应是一个指针。所以进行如上操作时打印的不是数组而是数组首地址。
数组中的操作方法
获取数据
获取数组中的元素。通常会用到遍历。所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。数组正是通过遍历的方式来获取数组中的元素。
例如:定义功能,用于打印数组中的元素。元素间用逗号隔开。
public static void printArray(int[] arr)
{
System.out.print("[");
for(int x=0; x<arr.length; x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
遍历是数组操作的基础,可以依托于遍历对数组进行查找,获取最大最小值和排序等操作。
例如获得数组中的最大值和最小值操作。
思路:
1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。通过一个变量进行临储。
2,让数组中的每一个元素都和这个变量中的值进行比较。如果大于了变量中的值,就用该该变量记录较大值。
3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。
步骤:
1,定义变量。初始化为数组中任意一个元素即可。
2,通过循环语句对数组进行遍历。
3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量。
需要定义一个功能来完成。以便提高复用性。
1,明确结果,数组中的最大元素 int。
2,未知内容:一个数组。int[]
public static int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
max = arr[x];
}
return max;
}
获取最小值。原理和活的最大值相同。代码如下:
public static int getMin(int[] arr)
{
int min = 0;
for(int x=1; x<arr.length; x++)
{
if(arr[x]<arr[min])
min = x;
}
return arr[min];
}
{
for (int x=0;x<arr.length-1 ;x++ )
{
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;
}
}
}
}
{
for (int x=0;x<arr.length-1 ;x++ )
{
for (int y=x+1;y<arr.length ;y++ )
{
if (arr[x]>arr[y])
{
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}