第四章 数组总结

4.1 数组的概述

       数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作是一个对象,虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。在程序设计中引入数组可以更有效地管理和处理数据。我们经常使用的数组包括一维数组和二维数组等。

4.2 一维数组

4.2.1 创建一维数组

4.2.2 初始化一维数组

4.2.3 获取数组长度

 例4.1

public class shuzu {

	public static void main(String[] args) {//主函数
	char a[] = { 'A' , 'B' , 'C' ,'D' };//创建一维数组
	System.out.println("数组a的长度为" + a.length);//输出结果
	char b[] = a;//创建一维数组b,直接等于数组a
	System.out.println("数组b的长度为" + b.length);//输出结果

	}

}

4.2.4 使用一维数组

例4.2

public class shuzu4_2 {

	public static void main(String[] args) {//主函数
		int day[] = new int[] { 31,28,31,30,31,30,31,31,30,31,30,31};//创建并初始化一维数组
		for (int i = 0; i < 12; i++) {//利用循环将信息输出
			System.out.println((i + 1)  + "月有" + day[i] + "天");//输出结果
			
		}

		}

}

4.3 二维数组 

比如快捷酒店,每一个楼层都有很多房间,这些房间都可以构成一维数组,如果这个酒店有500个房间,并且所有房间都在同一个楼层里,那么拿到499号房钥匙的旅客可能就不高兴了,从1号 扫一扫,看视频房走到499号房要花好长时间,因此每个酒店都不只有一个楼层,而是很多楼层,每一个楼层都会有很多房间,形成一个立体的结构,把大量的房间均摊了下来,这种结构就是二维表结构。

4.3.1 创建二维数组

4.3.2 初始化二维数组

例4.3

public class shzu4_12 {

	public static void main(String[] args) {
		/*第一种方式*/
		int tdarr1[][] = { { 1, 3, 5 }, {5, 9, 10 } };//创建并初始化二维数组
		/*第二种方式*/
		int tdarr2[][] = new int[][] { { 65, 55, 12 }, {92, 7, 22 } };//创建并初始化二维数组
		/*第三种方式*/
		int tdarr3[][] = new int[2][3];//先给数组分配内存空间
		tdarr3[0] = new int[] { 6, 54, 71 };//创建一维数组
		tdarr3[1][0] = 63;//给第二行第一列赋值为63
		tdarr3[1][1] = 10;//给第二行第二列赋值为10
		tdarr3[1][2] = 7;//给第二行第三列赋值为7
	
	}
}

4.3.3 使用二维数组

 例4.4

public class shuzu4_4 {

	public static void main(String[] args) {
		char arr[][] = new char[4][];
		arr[0] = new char[] {'春','眠','不','觉','晓'};//为每一行赋值
		arr[1] = new char[] {'处','处','闻','啼','鸟'};//为每一行赋值
		arr[2] = new char[] {'夜','来','风','语','声'};//为每一行赋值
		arr[3] = new char[] {'花','落','知','多','少'};//为每一行赋值
		/*横版输出*/
		System.out.println("-----横版-----");
		for (int i = 0; i < 4; i++) {//循环4行
			for (int j = 0; j < 5; j++) {//循环5列
				System.out.print(arr[i][j]);//输出数组中的元素
			}
		if (i % 2 == 0) {
			System.out.println(",");//如果是一,三句,输出逗号
		}else {
			System.out.println("。");//如果是二,四句,输出句号
		}
		}
	/*竖版输出*/
		System.out.println("-----竖版输出-----");
		for (int j = 0; j < 5; j++) {//列变行
			for (int i = 3; i >= 0; i--) {//行变列
				System.out.print(arr[i][j]);//输出数组中的元素
			}
			System.out.println();//换行
		}
		System.out.println("。,。,");//输出最后的标点
	}
}

 例4.5

public class shuzu4_5 {

	public static void main(String[] args) {//主函数
		int a[][]= new int[3][];//创建二维数,指定行数,不指定列数
		   a[0] = new int[] {52, 64,85,12,3,64};// 第一行分配6个元素 
		   a[1] = new int[] { 41,99,2};//第二行分配3个元素
		   a[2] = new int[] { 285, 61,278,2 };// 第三行分配4个元素 
		   for (int i =0; i<a.length; i++) {//数组长度判断条件
		   System.out.print("a[" +i+"]中有"+a[1].length+"个元素,分别是:"); //输出元素语段
		   for (int tmp : a[i]) { // foreach 循环输出数组中元素
		   System.out.print(tmp + " ");//输出元素个数
		   }
		   System.out.println();//输出元素
		   }
		 }

		}

4.4 数组的基本操作

遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现的。遍历一维数扫一扫,看组很简单,也很好理解,下面详细介绍遍历二维数组的方法。
遍历二维数组需使用双层for循环,通过数组的 length属性可获得数组的长度。

 例4.6

public class shuzu4_5 {

	public static void main(String[] args) {//主函数
		int b[][] = new int[][] { { 1 },{ 2,3 },{ 4,5,6 } }; // 定义二维数组
		  for (int k= 0; k<b.length; k++) {//确定数组长度
		  for (int c = 0; c<b[k].length; c++) { // 循环遍历二维数组中的每个元素
		  System.out.print(b[k][c]);//将数组中的元素输出
		  }
		  System.out.println();// 输出换行
		  
		 }
		 }
		}

4.4.2 填充和批量替换数组元素


数组中的元素定义完成后,可通过Armays类的静态方法1)来对数组中的元素进行分配,可以填充和替换的效果。0方法有两种参数类型,下面以int型数组为例介绍fll)方法的使用。

例4.7

import java.util.Arrays;
public class shuzu4_5 {

	public static void main(String[] args) {//主函数
	int arr[] = new int[5];//创建int型数组
	Arrays.fill(arr, 8);//使用同一个值对数组进行填充
	for (int i = 0; i < arr.length; i++) {//循环便利数组中的元素
		System.out.println("第" + i + "个元素是:" + arr[i]);//将数组中的元素依次输出
	}

	}

}

 例4.8

import java.util.Arrays;
public class shuzu4_5 {

	public static void main(String[] args) {//主函数
	int arr[] = new int[] {45, 12, 2, 77, 31,91,10 };//创建int型数组
	Arrays.fill(arr, 1, 4, 8);//使用fill()方法对数组进行填充
	for (int i = 0; i < arr.length; i++) {//循环便利数组中的元素
		System.out.println("第" + i + "个元素是:" + arr[i]);//将数组中的元素依次输出
	}

	}

}

4.4.3 复制数组

 例4.9

import java.util.Arrays;
public class shuzu4_5 {

	public static void main(String[] args) {//主函数
		int arr[] = new int[] { 23, 42 , 12 }; // 定义数组
		  int newarr[] = Arrays.copyOf(arr, 5);//复制数组arr
		  for (int i = 0; i<newarr.length; i++) { // 循环变量复制后的新数组
		  System.out.println("第" + i + "个元素:" + newarr[i]);//将新数组中的元素输出
		  }
	}
		}

 例4.10

import java.util.Arrays;
public class shuzu4_5 {

	public static void main(String[] args) {//主函数
		int arr[] = new int[] { 23, 42 , 12, 84, 10 }; // 定义数组
		  int newarr[] = Arrays.copyOfRange(arr, 0, 3);//复制数组arr
		  for (int i = 0; i<newarr.length; i++) { // 循环变量复制后的新数组
		  System.out.println(newarr[i]);//将新数组中的元素输出
		  }
	}
		}

4.5 数组的排序

4.5.1 算法:冒泡排序
冒泡排序是最常用的数组排序算法之一,它以简洁的思想与实现方法备受青睐,是切学者题先扫接能的一个排序算法。使用冒泡排序时,排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。

 例4.11

import java.util.Arrays;
public class shuzu4_5 {

	public static void main(String[] args) {//主函数
		  int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组 
		    Arrays.sort(arr);      //将数组进行排序 
		    System.out.println("排序后的结果为");//输出排序后的结果
		    for (int i =0; i < arr.length; i++){ //循环遍历排序后的数组
		     System.out.print(arr[i]+" ");  //将排序后数组中的各个元素输出
		    }
		   }
		}

4.5.2 算法:选择排序

例4.12

public class shuzu4_3 {

		 /**
		    * 直接选择排序法
		    *  @param array 
		    *    要排序的数组
		    */
		   public void sort(int[] array) {
		    int index;//定义整型变量
		    for (int i = 1; i <array.length; i++) {//for循环体语句
		     index = 0;//执行语句
		     for (int j = 1; j <= array.length - i; j++) {//for循环语句
		      if (array[j] > array[index]) {//if分支语句
		       index = j;//赋值
		      }
		     }
		     // 换在置array.length-i和index(最大值)上的两个数
		     int temp = array[array.length - i]; // 把第一个元素值保存到临时变量中
		     array[array.length - i] = array[index]; // 把第二个元素值保存到第一个元素单元中 
		     array[index] = temp; // 把临时变量也就是第一个元素原值保存到第二个元素中
		    }
		     showArray(array);//输出直接选择排序后的数组值 
		   }
		   /**
		    * 显示数组中的所有元素
		    *  @param array
		    *      要显示的数组
		    */
		   public void showArray(int[] array) {
		    System.out.println("选择排序的结果为:"); 
		    for (int i : array) { //遍历数组
		     System.out.print(i + " ");//输出每个数组元素值
		    }
		    System.out.println();//输出
		   }
		   public static void main (String[] args) {
		    int[] array ={63, 4, 24, 1, 3, 15 };//创建排序类的对象
		    shuzu4_3 sorter=new shuzu4_3();
		    //调用排序方法数组排序 
		    sorter.sort(array);
	}

}

4.5.3 Arrays.Sort()方法

例4.13

import java.util.Arrays;
public class shzu4_12 {

	public static void main(String[] args) {
		  int arr[] = new int[] { 23, 42, 12, 8 }; // 声明数组 
		    Arrays.sort(arr);      //将数组进行排序 
		    System.out.println("排序后的结果为");//输出排序后的结果
		    for (int i =0; i < arr.length; i++){ //循环遍历排序后的数组
		     System.out.print(arr[i]+" ");  //将排序后数组中的各个元素输出
		    }
		  
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值