Java中的数组

      谈到数组,大家都在学习C语言中频繁接触到它,自然并不陌生。数组在内存中表现形式为连续的存储空间,长度是从1开始的,但是下标或者索引就是从0开始的,这点需要记住,不然容易造成数组越界的错误。

      对于数组,由于能按照下标数学或者直接指定的下标,我们能快速地访问读取其中的每一个元素;但是数组的内存空间在定义的时候就固定了,不能改变大小,犹如建好的房屋,里面的房间数量已经一定了,不可能再增加。至于数组是属于什么数据类型呢?可以看下图:

 

Java数据类型图(来自网上):
                                             ┏数值型━┳━整数型:byte short int long
              ┏基本数据类型━━┫              ┗━浮点型:float double
              ┃                            ┣字符型:char                                         
数据类型╋                            ┗布尔型:boolean             
              ┃                            ┏类(class)
              ┗引用数据类型━━╋接口(interface)
                                             ┗数组(array)

从图中可以看出数组是属于引用数据类型的一种!

另外,数组只有一个唯一的属性length,即数组长度,表达式如:array.length

 

了解一维数组的使用方法,可以看下下面的代码:

public class ArrayOne {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
          ArrayOne ao=new ArrayOne();//创建对象
          int [] array=ao.creatArray(5);
          ao.printArray(array);//调用打印数组的方法
          System.out.println("\n");
          ao.maoPao(array);//调用数组冒泡的方法
          ao.printArray(array);
          System.out.println("\n");
	}
	
	/*
	 * 创建数组的方法
	 */
	public int [] creatArray(int Size)
	{
		int [] array=new int[Size];//创建一个整型数组
		Random random=new Random();//创建一个随机类对象
		//遍历数组,给数组中赋随机值
		for(int i=0;i<array.length;i++)
		{
			array[i]=random.nextInt(50);//给数组中元素赋0至50之间的随机一个数
		}
		return array;
	}
	/*
	 * 打印数组的方法
	 */
	public void printArray(int [] array)
	{
		//遍历数组,输出数组元素
		for(int i=0;i<array.length;i++)
		{
			System.out.print(array[i]+"\t");//输出元素的值
		}
		
	}
	/*
	 * 数组冒泡排序的方法
	 */
	public int [] maoPao(int [] array)
	{
		//循环遍历数组
		for(int i=0;i<array.length;i++)
		{//j从i+1开始
			for(int j=i+1;j<array.length;j++)
			{
				if(array[i]>array[j])//如果前面的元素大于后面的元素
				{//交换元素
					int temp=array[i];
					array[i]=array[j];
					array[j]=temp;						
					
				}
			}
		}
		return array;
	}

}


 二维数组的使用同样可以参照下面代码:

public class ArrayTwo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        ArrayTwo at=new ArrayTwo();//创建对象
        int [][] array=at.creatArray(5,5);
        at.printArray(array);//调用打印数组的方法
	}
/*
 * 创建数组的方法
 */
	public int [][] creatArray(int row,int column)
	{
		int [][]array=new int[row][column];//创建一个整型二维数组
		Random random=new Random();//创建随机类对象
		//遍历数组,给数组元素赋随机值
		for(int i=0;i<array.length;i++)
		{
			for(int j=0;j<array[i].length;j++)
			{
				array[i][j]=random.nextInt(50);//赋1到50之间的随机值
			}
		}
		return array;
	}
	/*
	 * 打印数组的方法
	 */
	public void printArray(int [][] array)
	{
		//遍历数组,输出元素值
		for(int i=0;i<array.length;i++)
		{
			for(int j=0;j<array[i].length;j++)
			{
				System.out.print(array[i][j]+"\t");//输出元素值
				if(j==array[i].length-1)
				{
					System.out.print("\n");
				}
			}
			
		}
		
	}
	
}

 此外,如果想要对一维数组进行排序(不用冒泡法),其中一种方法如下:

 

public class ArraySort {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        ArraySort as=new ArraySort();//创建对象
        int [] array=as.creatArray(10);//调用创建数组的方法
        as.sort(array);//调用数组排序的方法
        as.printArray(array);//调用打印数组的方法
        
	}
/*
 * 创建数组的方法
 */
	public int [] creatArray(int Size)
	{
		int [] array=new int[Size];//创建整型一维数组
		Random random=new Random();//创建随机类对象
		//遍历数组,给数组元素赋随机值
		for(int i=0;i<array.length;i++)
		{
			array[i]=random.nextInt(40);//赋值
		}
		
		return array;
		
	}
	/*
	 * 数组排序的方法
	 */
	public int[] sort(int [] array)
	{
		//遍历数组
		for(int i=0;i<array.length;i++)
		{
			int max=array[i];
			for(int j=i+1;j<array.length;j++)
			{
				if(array[i]>array[j])
				{
					int temp=array[i];
					array[i]=array[j];
					array[j]=temp;
				}
				if(array[j]>max)
				{ //找每次比较后的最大值
					max=array[j];
				}
			}
		}
		return array;
	}
	/*
	 * 打印数组的方法
	 */
	public void printArray(int [] array)
	{
		//遍历数组,输出元素
		for(int i=0;i<array.length;i++)
		{
			System.out.print(array[i]+"\t");//输出信息
			if(i==array.length-1)
			{
				System.out.println();
			}
		}
		
	}
}

 

 

如果你了解二维数组的知识后,可以完成一些相关练习如:二维数组找出最大值,输出每一个最大值所在行和列。

代码如下:

public class FindMax extends ArrayTwo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        FindMax fm=new FindMax();//创建对象
        int [][] array=fm.creatArray(5, 5);//调用创建数组方法
        fm.printArray(array);//调用打印数组的方法
        fm.findMax(array);//调用找最大值的方法
	}
	
    public void findMax(int [][] array)
    {
    	int row = 0,column=0;
    	int max=array[0][0];
    	
    	//循环遍历数组
    	for(int i=0;i<array.length;i++)
    	{
    		
    		for(int j=1;j<array[i].length;j++)
    		{
    			
    			if(max<array[i][j])
    			{
    				max=array[i][j];
    				row=i+1;
    				column=j+1;
    			}
    		}
    	}
    	System.out.println("最大值是"+max+"所在的行是"+row+",列是"+column);
    	findRepeat(array,row-1,column-1);
    	
    	
    }
    /*
     * 寻找重复最大值方法
     */
    public void findRepeat(int [] []array,int row,int column)
    {
    	int m,n;
    	//循环遍历数组
    	for(int i=0;i<array.length;i++)
    	{
    		
    		for(int j=1;j<array[i].length;j++)
    		{
    			
    			if(array[row][column]==array[i][j])
    			{
    				m=i;
    				n=j;
    				m++;
    				n++;
    				System.out.println("最大值是"+array[i][j]+"所在的行是"+m+",列是"+n);
    			}
    		}
    	}
    }

}

 

 

你可能感兴趣的:(java)