数组的本质:一串连续的内存空间
案例:publicclass C_201_05_01_计算方差 {
publicstatic void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入5个整数");
int a= scanner.nextInt();
int b= scanner.nextInt();
int c= scanner.nextInt();
int d= scanner.nextInt();
int e= scanner.nextInt();
doublemean = 0;
mean = (a+b+c+d+e)/5;
doublevariance=0;
variance =(a-mean)*(a-mean)+(b-mean)*(b-mean)+(c-mean)*(c-mean)+(d-mean)*(d-mean)+(e-mean)*(e-mean);
variance = variance/5;
System.out.println(variance);
}
这种方法十分的死板,如果是十个数,一百个数,定义的变量会特别多,代码的会一直的重复。
案例二:
publicclass E201_05_01_计算方差 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("输入五个数");
int []a = new int[5];
int sum = 0;
for(int i =0;i<a.length;i++){
a[i] = scanner.nextInt();
sum +=a[i];
}
double avg = sum/5.0;
double vari = 0;
for (int i =0;i<a.length;i++){
vari +=(a[i]-avg)*(a[i]-avg);
}
vari = vari/5;
System.out.println("方差是"+vari);
}
数组和循环的配合,可以使解题方法更为灵活,且不需要定过多的变量。
数组的遍历:访问到数组中的每一个元素,并且可以对每一个元素进行一系列的操作:
数组的遍历:方法一
for (int i=0;i<a.length;i++){
System.out.println(a[i]+"");
方法二:foreach遍历
for (int i:a){
System.out.print(i+" ");
方法二就是方法一的简化写法,但是两者有一定的区别,方法以控制便利的区间和步长,而方法二只能将所有的元素进行遍历。
常见的查找方法:
第一种顺序查找,也就是一位一位的查找
public class E201_05_03_数组的查找 {
publicstatic void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num= scanner.nextInt();
int []arr={2,4,6,8,10,12,14,16};
int index= find(arr,num);
if(index== -1){
System.out.println("找不到");
}else{
System.out.println(index);
}
}
public static int find(int[] arr,int num){
intcount=0;
for(int i :arr){
if(i==num){
System.out.println(count);
}
count++;
}
System.out.println("没有找到");
return-1;
}
弊端:数据量大的时候,在最差的情况下,计算机的负载也非常大。效率低
拆分查找:(二分查找):优化了查找的效率。
弊端:数组必须经过排序
public class E201_05_04_数组的折半查找 {
publicstatic void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num= scanner.nextInt();
int []arr= {2,4,6,8,10,12,14,16};
int index= find(arr,num);
if(index== -1){
System.out.println("找不到");
}else{
System.out.println(index);
}
}
privatestatic int find(int[] arr, int num) {
int start= 0;
int end= arr.length-1;
while(start<=end){
intmid = (start+end)/2;
if(arr[mid] == num){
return mid;
}
if(arr[mid] > num) {
end = mid-1;
}else{
start = mid+1;
}
}
return-1;