所谓数组,是有序的元素序列。若将有限个数据类型相同的变量的集合命名,那么这个名就称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。
数组是用于储存多个相同类型数据的集合。
切记:一旦数组被创建,那么该数组的大小是固定的,并且使用一个数组引用变量,通过下标来访问数组中的元素。
创建数组
一、创建一维数组的形式
- 元素类型[] 数组引用变量 = new 元素类型[数组大小,即(数组的长度)]
- 元素类型 数组引用变量 = new 元素类型[数组大小,即(数组的长度)]
特别提醒:对于一个数组变量看起来似乎是存储了一个数组,但实际上它存储的是指向数组的引 用。严格地讲,一个数组变量和一个数组是不同的,但多数情况下它们的差别是可以忽略 的。因此,为了简化,通常可以说myList 是一个数组,而不用更长的陈述:myList 是一 个含有 个 double 型元素數组的引用变量。
1、数组大小和默认值
当一个数组分配空间时,必须指定该数组能够存储元素的个数,进而确定数组的大小,并且数组一旦被创建,则数组的大小即(长度)不能在修改。
数组的默认值:数值型的基本数据类型的默认值为0;字符型(即char)的默认值为'\u0000';布尔类型(boolean)的默认值为false。
2、数组元素的查找
通过下面的例子介绍一下数组的查找:
import java.util.Scanner;
/*
所谓查找,不明思议就是在一组数据中查找某一个值(大多情况下就是定义一个数组,在给定某一个值,进行查找),
而且查找的结果就只有两种,一、true;二、false
具体查找的方法都有哪些?——一般就是将给定的一组数据,从第一个遍历到所要查找的数值之后结束
并打印自己所查找的结果,对于初学者估计有很大的帮助,便于理解。
但是该方法的规模呈线性增长,当一组数据足够多时,岂不是规模越大,时间复杂度就越大
二——接下来这一种算法就是二分法:
二分法应该不陌生吧,不明思议就是对半查找,但是二分法查找是有一定的前提:就是该数据必须呈一种
升序或者降序
例如:在下面的一组数据中查找7
编号: 0 1 2 3 4 5 6
1 3 5 7 9 12 34 该数据总共为6个
查找的第一步:首先把该数据分成两部分——
0 1 2
第一步分为:1 3 5
3 4 5 6
第二部分为:7 9 12 34
查找的第二部:比较所要查的数值(7)与(该组数据的最小下标与最大下标之和再整除2的值)
查找的第三步:如果大于在第二部分里面在找,如果小于就在第一部分里面查找;
查找的第四部:7大于该值,因此在第二部分,所以再把第二部分数据分为两个部分——
3 4
第一部分:7 9
5 6
第二部分:12 34
查找的第五步:重复第二步,第三步
查找的第六步:最终找到在下标为3处所对应的值是7
总结:二分查找虽然过程能麻烦一点,但是规模较小于第一种方法,该方法的时间复杂度为logn
等其它查找方法
在查找的整个过程中会遇到,排序问题:我先介绍一下冒泡排序:
例:给定一组数据要求为升序:
1 3 2 7 4 总共为6个数字
具体的排序思路如下:
第一步:0 1 2 3 4
1 3 2 7 4 先是进行0和1进行比较:1小于3,则不动,再进行3和2比较,3大于2,3与2交换位置
以此类推,因此第一次所得结果为:1 2 3 4 7,结束
*/
class Test03{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.print("请输入一串数字:");
int[] arr=new int[10];
int count=0;
int temp=1;
while(true){
arr[count++]=input.nextInt();
if(count==10){
break;
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
/*
冒泡排序
*/
for(int i=1;i<10;i++){
for(int j=0;j<9;j++){
if(arr[j]>arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
int index=-1;//存放下标的
int min=0;//存放小的下标
int max=arr.length-1;//存放大的下标
int mid=(min+max)/2;//中间
System.out.print("Enter a num:");
int num=input.nextInt();
while(true){
if(num>arr[mid]){
min=mid+1;
mid=(min+max)/2;
}else if(num<arr[mid]){
max=mid-1;
mid=(min+max)/2;
}else{
index=mid;
System.out.println(index);
break;
}
if(min>max){
System.out.println(index);
break;
}
}
}
}
二、二维数组
二维数组的基础知识
1、声明二维数组变量并创建二维数组
声明二维数组的语法:
1、数据类型[ ][ ] 数组名;2、数据类型 数组名[ ][ ];
注意事项:使用matrix[2,1]访问行下为2,列下标为1的元素是一种常见的错误。在Java中,每一个下标必须放在一个方括号中。
2、获取二维数组的长度
例:int[ ][ ] matrix=new int[10][5];
注意:在一维数组中,数组名 . length是获取一维数组的长度;而在二维数组当中,数组名 . length获取的是行的长度,数组名[i] . length获取的是每一行中的元素有多少个;相当于每一行中的列数。
3、对二维数组的操作
例:
import java.util.Scanner;
class Demo09{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
System.out.println("Enter a 3-by-4 matrix row by row:");
double[][] arr=new double[3][4];
int count1=0,count2=0,count3=0;
/*
初始化二维数组
*/
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
arr[i][j]=input.nextDouble();
}
}
/*
打印二维数组
*/
print(arr);
System.out.println("Sum of the elements at column 0 is "+sumColumn(arr,0));
System.out.println("Sum of the elements at column 1 is "+sumColumn(arr,1));
System.out.println("Sum of the elements at column 2 is "+sumColumn(arr,2));
System.out.println("Sum of the elements at column 3 is "+sumColumn(arr,3));
}
public static void print(double[][] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
/*
求和
*/
public static double sumColumn(double[][] arr,int columnIndex){
double sum=0;
//System.out.println(arr.length);
for(int i=0;i<arr.length;i++){
sum=sum+arr[i][columnIndex];
//System.out.println(sum);
}
return sum;
}
}