Java 语言中提供的数组是用来存储数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。固定大小的同类型元素。
4.2一维数组例4.1
public class 四1 {
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
public class 四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二维数组 4.3.1 创建二维数组常见错误:
使用数组最常见的错误就是数组下标越界,例如:
public class Error {
public static void main (String args []){
int a[] = new int [3];//最大下标为2
System.out.println(a [3]);//下标越界!}
这段代码运行时会给出数组下标越界的异常,
例4.3
public class 四3 {
public static void main (String args []) {
int tdarrl [][] = {{1,3,5},{5,9,10}};
int tdarrl2 [][] = new int [][] {{65,55,12},{92,7,22}};
int tdarrl3 [][] = new int [2][3] ;//先给数组分配内存空间
tdarrl3[0] = new int[] {6,54,71};//给第一行分配一个一维数组
tdarrl3[1][0] = 63;//给第二行第一列赋值为63
tdarrl3[1][1] = 10;//给第二行第二列赋值为10
tdarrl3[1][2] = 7;//给第二行第三列赋值为7
}
}
4.3.3 使用二维数组
例4.4
public class 四4 {
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 = 0; i < 4; i++) {//行变列,反序输出
System.out.print(arr[i][j]);//输出数组中的元素
}
System.out.println();//换行
}
System.out.println("。,。,");//输出最后的标点
}
}
运行结果:
例4.5
public class 四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[i].length + "个元素,分别是:");
for (int tmp : a[i]) {//foreach循环输出数组中元素
System.out.print(tmp + " ");
}
System.out.println();
}
}
}
运行结果:
4.4 数组的基本操作 4.4.1 遍历数组遍历二维数组需使用双层for循环,通过数组的length属性可获得数组的长度。
例4.6
package 课本第四章例题;
public class 四6 {
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 填充和批量替换数组元素
1、fill(int[] a, int value)
Arrays.fill(int[] a , int value)
例4.7
import java.util.Arrays;
public class 四7 {
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]);
}
}
}
2、fill(int[] a , int fromIndex , int toIndex , int value)
Arrays.fill(int[] a,int formIndex,int toIndex, int value)
例4.8
import java.util.Arrays; //导入java.util.Arrays类
public class 四8 {
public static void main (String args[]) {
int arr[] = new int[] {45,12,2,7,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 复制数组
1. copyOf方法
例4.9
import java.util.Arrays;
public class 四9 {
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] );//将新数组输出
}
}
}
2.copyOfRange()
例4.10
import java.util.Arrays;
public class 四10 {
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 算法:冒泡排序
例4.11
public class BubbleSort {
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);
}
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};
BubbleSort sorter = new BubbleSort();
sorter.sort( array);
}
}
4.52 算法:选择排序
例4.12
public class SelectSort {
public void sort (int[] array) {
int index;
for (int i = 1; i < array.length; i++) {
index = 0;
for (int j = 1; j <= array.length - i; j++) {
if (array[j] > array[index]) {
index = j;
}
}
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 Arrays.sort()方法
例4.13
import java.util.Arrays;
public class 四13 {
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]+" ");
}
}
}



