数组的基础知识:
1.什么是数组:
数组是相同类型的数据按顺序组成的一种引用数据类型
提醒:数组一旦被创建,它的大小是固定的。
2.数组声明:
数组类型[] 数组名 或则 数据类型 数组名[]
3.创建数组:
- 先声明,后创建
数组名 = new 数据类型[数组长度]
int[] arr; //声明数组
arr = new int[10] //创建一个长度为10的整形数组
- 声明的同时创建数组
数据类型[] 数组名 = new 数据类型[数组长度]
int[] arr = new int[10]; //声明并创建一个长度为10的整形数组arr
提醒:创建数组时数组长度必须指定,整形数组的默认值都为0。
4.数组的初始化:
声明数组的同时给数组赋值,叫数组的初始化。
int[] arr = {1,2,3,4,5}; //初始化数组,数组的长度就是初始化时数组元素都为个数
5.数组元素的引用:
语法格式:
数组名[下标];
提醒:下标从0开始
6.数组长度:
属性length表示数组的长度。
int[] arr = {1,2,3,4,5};
System.out.println(arr.length);
7.增强型for循环(又叫foreach循环):
int[] arr = {1,2,3};
for(int n:arr)
System.out.println(n); //打印输出数组
思考:如何对变量a,b的值进行交换?
我们可以:
int a = 1,b = 3;
int temp;
temp = a;a = b;b = temp; //这样就交换了a,b的值
8.复制数组:
要点:要将一个数组复制到另一个数组中,需要将数组的每个元素复制到另一个数组中。
主意:在Java中,可以使赋值语句复制基本类型的变量,但不能复制数组。
复制数组的三种方法:
- 使用循环语句逐个复制数组的元素
- 使用System类中的静态方法arraycopy
- 使用Clone方法复制数组
src:源数组
srcPos:源数组要复制的起始位置
dest:目的数组
destPos:目的数组放置的起始位置
length:复制的长度
主意:src和dest都必须是同类型或则可以进行转换类型的数组
import java.lang.System;
public class Array2 {
public static void main(String args[]) {
int arr[] = {1,3,5,6};
//使用循环语句复制数组
int arr1[] = new int[arr.length];
for(int i = 0;i<arr.length;i++) {
arr1[i] = arr[i];
System.out.print(arr1[i]+" ");
}
System.out.println();
//使用System类中的静态方法arrayCopy复制数组
System.arraycopy(arr, 0, arr1, 0, 4);
for(int arr2:arr1) { //使用增强型语句打印数组
System.out.print(arr2+" ");
}
}
}
一维数组的应用:
public class Array1 {
public static void main(String args[]) {
int[] arr1; //声明整形数组
String arr2[]; //声明一个字符串类型的数组
arr1 = new int[5]; //创建数组
arr2 = new String[10]; //创建数组
float[] arr3 = new float[3]; //声明并创建一个浮点类型的数组
char[] ch = {'a','b','c','d'}; //声明并创建数组
System.out.println("ch数组的长度为:"+ch.length);
System.out.println("arr1数组的第2个元素为:"+arr1[1]);
System.out.println("arr2数组的第5个元素为:"+arr2[4]);
System.out.println("arr3数组的最后一个元素为"+arr3[arr3.length-1]);
for(int i = 0;i<arr1.length;i++) { //循环输出数组元素
arr1[i] = i+1;
System.out.print(arr1[i]+" ");
}
}
}
输出结果为:
记住:创建数组后,它的元素会被赋予默认值。数值基本数据类型的默认值是0,char型的默认值是‘\u0000’,字符串类型的默认值是null,boolean型的默认值是false。
求数组元素的累加和:
public class Summation {
public static void main(String args[]) {
int arr[] = new int[5]; //定义并创建数组
Scanner sc = new Scanner(System.in); //从键盘接收数据,为元素赋值
for(int i = 0;i<arr.length;i++) {
System.out.println("请输入第"+(i+1)+"个元素");
arr[i] = sc.nextInt();
}
System.out.println("数组元素为:");
for(int i = 0;i<arr.length;i++)
System.out.print(arr[i]+" ");
int sum = 0;
for(int i = 0;i<arr.length;i++) {
sum+=arr[i];
}
System.out.println(); //换行
System.out.println("数组元素的和为:"+sum);
}
}
运行结果:
例子:
public class Array{
public static void main(String args[]) {
int[] arr1 = new int[6];
for(int i = 0;i<arr1.length;i++) {
arr1[i] = (int) (Math.random()*100); //使用随机数初始化数组
System.out.print(arr1[i]+" ");
}
System.out.println();
double arr2[] = {1.1,2.2,1.3,4.1}; //显示数组
for(int i = 0;i<arr2.length;i++)
System.out.print(arr2[i]+" ");
System.out.println();
for(double d:arr2) //使用foreach循环打印数组
System.out.print(d+" ");
System.out.println();
int arr3[] = new int[5];//对元素求和
int total = 0;
for(int i = 0;i<arr3.length;i++) {
arr3[i] = i;
total+=arr3[i];
}
System.out.print(total+" ");
System.out.println();
int arr4[] = {3,1,5,2020,8,9}; //找出元素中的最大值
int max = arr4[0];
for(int i = 0;i<arr4.length;i++) {
if(arr4[i]>max)
max = arr4[i];
}
System.out.println(max);
}
用数组编写一个程序,求出其数目的平均值并找出大于平均值的元素:
public class AnalyzeNumbers {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
System.out.println("请输入数字的个数:");
int n = input.nextInt();
double [] numbers = new double[n];
double sum = 0;
System.out.println("请输入数字:");
for(int i = 0;i<n;i++) {
numbers[i] = input.nextDouble();
sum +=numbers[i];
}
double average = sum/n; //求平均值
int count = 0;
for(int i = 0;i<n;i++) {
if(numbers[i]>average)
count++; //求出平均值的个数
}
for(int I = 0;I<n;I++) {
if(numbers[I]>average)
System.out.println(+numbers[I]+" ");
}
System.out.println("其和为"+sum);
System.out.println("平均值是"+average);
System.out.println("该数组中大于平均值的个数有"+count+"个");
}
}
二维数组:
二维数组的元素通过行和列的下标来访问。二维数组也是存放相同数据类型得数据,可以看成是一维数组的的组成。
1.语法:
数据类型[][] 数组名;或则 数据类型 数组名[][];
第三种语法方式不推荐。
public class Array2 {
public static void main(String args[]) {
//二维数组声明的三种方式
int[][] arr1; //声明int类型的二维数组
float arr2[][]; //声明float类型的二维数组
double [] arr3[]; //声明double类型的二维数组
arr1 = new int[3][3]; //输出3行3列的int类型的数组
arr1[1][2] = 9;
System.out.println("arr1数组第2行第3列的元素为:"+arr1[1][2]);
char[][] ch = new char[3][5]; //声明的同时并创建
arr2 = new float[3][]; //创建二维数组时只指定行数时不会报错,但运行后有可能会出现空指针异常
}
}
2.获取二维数组的长度:
我们通过一段代码来看
public class Array2 {
public static void main(String args[]) {
int[][] x = new int[3][4];
System.out.print(x.length);
System.out.print(x[0].length);
System.out.print(x[1].length);
System.out.print(x[2].length);
}
}
输出结果是3444,可知二维数组是一个一维数组,它的每个元素是另一个一维数组。
3.不规则的二维数组:
float arr[0] = new float[3]; //第一行有三列
float ar1[1] = new float[4]; //第二行有四列
float ar2[2] = new float[5]; //第三行有五列