第四章 数组
目录
4.1 数组的概述
1.数组的理解:数组(Array),是多个相同类型数据按一定顺 序排列的集合,并使用一个名字命名,
并通过编号的方式对这些数据进行统一管理。
4.2 一维数组
一维数组实质上是一组相同类型数据的线性集合
4.2.1创建一维数组
int arr[];//声明int型数组,数组中的每一个元素都是int型数值
double[]dou;//声明double型数组,数组中的每一个元素都是double型数值
数组名字=new 数组元素类型[数组元素的个数];
4.2.2 初始化一位数组
int a[]={1,2,3};//第一种方法
int b[]=new int[]{4,5,6};//第二种方法
int c[]=new int[3];//第三种方法
c[0]=7;//给第一个元素赋值
c[1]=8;//给第二个元素赋值
c[2]=9;//给第三个元素赋值
4.2.3 获取数组长度
package wu;
public class ketang36 {
public static void main(String[] args) {//主函数
char a[]= {'A','B','C','D'};//创建一堆数组
System.out.println("数组a的长度为"+a.length);//输出数组a长度
char b[]= a;//创建一堆数组b,直接等于数组a
System.out.println("数组b的长度为"+b.length);//输出数组b的长度
}
}
输出结果
4.2.4 使用一维数组
package wu;
public class ketang37 {
public static void main(String[] args) {
int day[]=new int[] {31,28,30,31,30,31,30,31,30,31,30,31};
//创建并初始一推数组
for (int i=0;i<12;i++) {//利用循环将信息输出
System.out.println((i+1)+"月有"+day[i]+"天");//输出语句
}
}
}
输出结果
4.3 二维数组
4.3.1 创建二维数组
声明二维数组:
int tdarr[][];
char[][] tdarr2;
为数组分配
int a[][];
a=new int[2][4];//直接分配行和列
int b[][];
b=new int[2][];//先分配行,不分配列
b[0]=new int[2];//给第一行分配列
b[1]=new int[2];//给第二行分配列
4.3.2 初始化二维数组
package wu;
public class ketang38 {
public static void main(String[] args) {//主函数
int tdarr[][]= {{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
}
}
创建三维,四维和五维
int a[][]=new int[3][4][5];//创建三维数组
char b[][][]=new char[6][7][8][9];//创建四维数组
double c[][][][]=new double[10][11][12][13][14];//创建五维数组
4.3.3 使用二维数组
package wu;
public class ketang39 {
public static void main(String[] args) {
char arr[][]=new char[4][];//创建一个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("\n-----竖版-----");//输出语句
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("。,。,");//输出最后的标点
}
}
输出结果
创建一个不规则的二维数组。
package wu;
public class ketang40 {
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.println("a["+i+"]中有"+a[i].length+"个元素,分别是:");//输出语句
for(int tmp:a[i]) {//foreach循环输出数组中的元素
System.out.print(tmp+" ");//数组中的元素输出空格
}
System.out.println();//输出换行
}
}
}
输出结果
4.4 数组的基本操作
4.4.1 遍历数组
public class Trap{
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.length;c++){//循环遍历数组二维数组中的每一个元素
System.out.print(b[k][c]);//将数组中的元素输出
}
System.out.println();//输出换行
}
}
}
4.4.2 填充和批量替换数组元素
package wu;
import java.util.Arrays;
public class ketang42 {
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]);//将数组中的元素依次输出
}
}
}
运行结果
通过fill()方法替换数组元素
package wu;
import java.util.Arrays;
public class ketang43 {
public static void main(String[] args) {//主函数
int arr[]=new int[] {45,12,2,77,31,91,10};//定义并初始化int型数组arr
Arrays.fill(arr, 1,4,8);//使用fill、()方法对数组进行填充最后填冲不包括
for(int i=0;i<arr.length;i++) {//玄幻遍历数组中的元素
System.out.println("第"+i+"个元素是:"+arr[i]);//将数组中的每一个元素输出
}
}
}
运行结果
4.4.3 复制数组
package wu;
import java.util.Arrays;
public class ketang44 {
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]) ;//输出语句
}
}
}
运行结果
创建一维数组中的数复制到新数组
package wu;
import java.util.Arrays;
public class ketang45 {
public static void main(String[] args) {//主方法
int arr[]=new int[] {23,42,12,84,10};//定义数组
int newarr[]=Arrays.copyOfRange(arr, 0,3);//复制数组
for(int i=0;i<newarr.length;i++) {//循环遍历复制后的新数组
System.out.println(newarr[i]);//将数组中的每个元素输出
}
}
}
运行结果
4.5 数组的排序
4.5.1 冒泡排序
package wu;
/*
* 冒泡排序方法
* @param array
* 要排序的数组
*/
public class ketang46 {
public void sort(int[] array) {//主函数
for(int i=1;i<array.length;i++) {//循环遍历数组的元素
for(int j=0;j<array.length-i;j++) {//比较相邻两个元素,较大的数往后冒泡
if(array[j]>array[j+1]) {//如果前一个元素比后一个元素大,则两元素互换
int temp=array[j];//把第一个元素值保存到临时变量中
array[j]=array[j+1];//把第二个元素值保存到第一个元素单元中
array[j+1]=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};//创建冒泡排序类的对象
ketang46 Sorter=new ketang46();//调用排序方法将数组排序
Sorter.sort(array);//输出语句
}
}
运行结果
4.5.2 算法:选择排序
package wu;
public class ketang47 {
public void sort (int[] array) {
int index;//定义int型index
for (int i=1;i<array.length;i++) {//循环遍历数组
index=0;//定义index为0
for(int j=1;j<=array.length-i;j++) {//比较相邻的两个元素,较大的往后冒泡
if(array[j]>array[index]) {//比较大小
index=j; //存放给index
}
}
int temp=array[array.length-i];//把一个元素值保存到临时变量里
array[array.length-i]=array[index];//将变量放在第二个元素中
array[index]=temp;//把临时变量保存在第二发元素中
}
showArray(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};//定义遍历数组
SelectSort sorter=new SelectSort();//调用排序将数组排序
sorter.sort(array);
}
}
运行结果
4.5.3 Arrayas.Sort()方法
package wu;
import java.util.Arrays;
public class ketang48 {
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.println(arr[i]+" ");//将排序后的数组中的各个元素输出
}
}
}
4.6 总结
本章介绍了数组的创建及使用方法,重点是创建数组,数组赋值以及读取数组中的元素的值,Arrays类还是提供了其他操作数组的方法。