一步一步,虽然走得慢,但我们还是在前进,这一周我们主要学习Java的数组,相信只要是工科类的同学,都应该听说过数组!当你想输入多个变量且变量之间还存在某种内在联系,但你又懒,不想一个一个用单独的变量来命名它们时,数组就出现了,所以懒才是促使人类不断进步的根源~,通过使用数组,可以在很大程度上缩短和简化程序代码,从而提高应用程序的效率。
一、Java数组介绍
数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。数组的下标是从0开始,如果数组有 n 个元素,那么数组的下标是从0 到(n-1)。在计算机语言中数组是非常重要的集合类型,大部分计算机语言中数组具有如下三个基本特性:
①一致性:数组只能保存相同数据类型元素,元素的数据类型可以 是任何相同的数据类型。
②有序性:数组中的元素是有序的,通过下标访问。
③不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变。
1.1、一维数组
数组中每个元素都只带有一个下标,是数组中最简单的一种数组。声明如下:
type arrayName[ ]或type[ ] arrayName
type可以为Java中任意的数据类型,数组名arrayName为一个合法的标识符,[ ]指明该变量是一个数组类型变量。如插char s[ ];即数组s里的每一个元素都是char类型的。另外,学过C或C++的同学有没有发现什么不同呢?C或C++中定义数组的时候必须指定数组长度,而在Java中,数组定义的时候并不为数组分配内存,所以不用指出数组中元素的个数。Java 中初始化数组分为静态(直接指定)和动态(使用new运算符)两种,共有以下3 种方式:
①使用 new 指定数组大小后进行初始化;
②使用 new 指定数组元素的值;
③直接指定数组元素的值。
静态初始化如:int s[ ] = {1,2,3,4};
动态初始化是使用运算符new为数组分配空间,
其创建格式如下:
arrayName[ ] = new type[arraySize];
//数组名 = new 数据类型[数组长度];
如: int s[ ];
s=new int[4];
//即此时给数组分配4个应用空间,初始化每个引用值为空
注意:单独的int s[4];这种写法是错误的,数组的内存都是通过new动态分配的。
1.2、二维数组
与一维数组类似,二维数组的声明也有两种方式:
type[ ][ ] arrayName;
// 数据类型[ ][ ] 数组名;或
type arrayName[ ][ ];
// 数据类型 数组名[ ][ ];
其中第一个中括号表示行,第二个中括号表示列。
也可以通过以下三种方式初始化:
(1)type[][] arrayName = new type[][]{值 1,值 2,值 3,…, 值 n};
// 在定义时初始化
(2)type[][] arrayName = new type[size1][size2];
// 指定空间,在赋值
(3)type[][] arrayName = new type[size][];
// 数组第二维长度为空,可变化
二、数组的基本操作
2.1 数组查找
从数组中查询指定位置的元素,或者查询某元素在指定数组中 的位置,语法格式如下:
binarySearch(Object[] a,Object key);
a:表示要搜索的数组,key 表示要搜索的值。
2.2、数组复制arraycopy()
System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)
其中srcArray表示原数组,srcIndex 表示原数组中的起始索引,destArray 表示目标数组,destIndex 表示目标数组中的起始索引,length 表示要复制的数组长度。
2.3、求最值
将变量min与max初值设成数组的第1个元素后,再逐一与数组中的各元素相比。比min小,就将该元索的值指定给min存放,使min的内容保持最小。同样,当该元素比max大时,就将该元素的值指定给max存放,使max的内容保持最大。for循环执行完,也就表示数组中所有的元素都已经比较完毕,此时,变量min与max的内容就是最小值与最大值,此过程如下图所示:
三、数组的简单排序
数组的排序主要是升序或降序,Java语言使用Arrays类提供的 sort()方法来对数组进行排序。使用java.util.Arrays类中的sort()方法对数组进行升序分为以下两步:
①导入java.util.Arrays包。
②使用Arrays.sort(数组名)语法对数组进行排序,排序规则是从小到大,即升序。
降序主要是利用Collections.reverseOrder()方法。具体我们看代码吧~
四、实战
1、
2、
3、
4、
源码
1、
package array;
public class yiwei {
public static void main(String[] args){
//使用 new 指定数组大小后进行初始化
int[] number = new int[3];
number[0] = 5;
number[1] = 3;
number[2] = 1;
int[] age = new int[] { 3, 4, 5,6,7 };
// 使用 new 指定数组元素的值
int[] high = { 4, 5, 6, 7, 8 };
// 直接指定数组元素的值
System.out.println("number的"+
"第一个元素为:" + number[0]);
//获取单个元素
System.out.printf("number数组为:" );
for (int i = 0; i < number.length; i++)
{
System.out.print(number[i]+" ");
//获取数组全部元素
}
System.out.println();
//输出换行
System.out.printf("age数组为:" );
for (int i = 0; i < age.length; i++) {
System.out.print(age[i]+" ");
//获取数组全部元素
}
System.out.println();
//输出换行
System.out.printf("high数组为:" );
for (int i = 0; i < high.length; i++) {
System.out.print(high[i]+" ");
//获取数组全部元素
}
}
}
2、
package array;
public class erwei {
public static void main(String[] args) {
double[][] number = {{100, 99, 99},
{100, 98, 97},
{100, 100, 99.5},
{99.5, 99, 98.5}};
System.out.println("number"+
"二维数组为:" );
for (int i = 0;i < number.length; i++)
{
// 遍历行
for (int j = 0;j < number[i].length;j++)
{
//遍历列
System.out.print(number[i][j]+"\t");
}
System.out.println( );
}
}
}
3、
package array;
import java.util.Arrays; //导入Arrays包
public class find {
public static void main(String[] args) {
double[] score = {99.5,90,98,97.5,
100,95,85.5,99};
Arrays.sort(score);
//先将数组升序排序
int index1 =
Arrays.binarySearch(score,100)+1;
//索引从0开始,所以在第几位应该+1
int index2 =
Arrays.binarySearch(score,93)+1;
//未找到则返回<=0的数,
System.out.println("查找到 100"+
" 的位置是第"+index1+"个");
System.out.println("查找到 60"+
" 的位置是第"+ index2+"个");
}
}
4、
package array;
import java.util.Scanner;
public class min {
public static void main(String[] args)
{
System.out.println("请输入"+
"几个数并用逗号隔开:");
Scanner sc =
new Scanner(System.in);
String str = sc.next().toString();
String[] arr = str.split(",");
int[] b = new int[arr.length];
System.out.printf("原数组为:");
for(int j = 0; j<b.length;j++) {
b[j] = Integer.parseInt(arr[j]);
System.out.print(b[j]+" ");
}
System.out.println();
int min = 0;
// 定义变量保存到最小值
min = b[0];
// 把第1个元素的内容赋值min
for (int x = 0; x < b.length; x++){
// 循环求岀最小值
if (b[x] < min) {
// 依次判断后续的元素是否比min小
min = b[x];
// 如果小,则修改min内容
}
}
System.out.println("b数组的"+
"最小值为:" + min);
// 输出最小值
}
}