数组:
1.什么是数组
程序:由人事先写好的,让电脑做的
程序=算法+数据结构
一个好的算法+数据结构=优秀的程序
算法:变量,运算符,分支,循环
数据结构:数组是一种最基本的数据结构 集合
数组可以理解为一个容器 水杯=容器 存储水
数组 容器 存储数据
数组只能存放具有相同数据类型的一堆数据
2.数组的定义
语法:数据类型【】 数组名/变量名=new 数据类型【大小】;
3.数组的初始化
4.数组的访问
5.数组的复制
6.数组的排序
package com.lddx.day1029;
//java中的数组
public class ArrayDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//数据类型[] 数组名/变量名=new 数据类型[大小];
//10 20 30 40 50 60
int[] arr1=new int[6];
//定义了一个int类型的数组,数组的名字为arr1。数组的大小为6,可以在数组arr1中存储6个int类型的整数
double[] arr2=new double[3];
String[] arr3=new String[4];
}
}
package com.lddx.day1031;
import java.util.Arrays;
public class ArrayDemo1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//1 数组的概念
//2 数组的定义
//3 数组的初始化
//方式1:数组在创建之后没有具体的值,但是会有默认值这种方式称为动态初始化,和数组定义的语法一致
int[] arr=new int[5];
//arr数组创建完后,只有大小,没有具体值,但默认值为0;
//arr 0 0 0 0 0
double[] arr1=new double[5];
//arr1 0.0 0.0 0.0 0.0 0.0 0.0
boolean[] arr2=new boolean[5];
//arr2 false false false false false
String[] arr3=new String[5];
//String类型为引用类型,默认值为null
//arr3 null null null null null
//总结:数组动态初始化后,数组中的元素内容是有默认值的
//byte short int long char类型的数组,默认值是0
//float double类型的数组,默认值是false
//String类型的引用类型数组,默认值是null
int[] a=new int[5];
//方式2:静态初始化
//可以在数组声明的同时对数组里的元素内容直接初始化
int[] arr4={10,20,30,40,50};
//既有大小,又有内容
//声明的数组arr4的大小为5,元素内容为10 20 30 40 50
char[] arr5={'a','b','c'};
//声明数组arr5的大小为3,内容为‘a' ’b' ‘c'
String[] arr6={"张三","李四"};
//声明的数组arr6的大小为2,内容为“张三” “李四”
// int[] arr7={7,'m',"张三",true};编译错误,{}里的内容要和数组的数据类型匹配
//方式3:也属于静态初始化的方式
//方式1+方式2的结合
int[] arr8=new int[]{100,200,300};
//数组arr8的大小为3,数组的内容为100 200 300
//注意:一种错误的写法
int[] arr9;//先声明一个数组,为arr9
//arr9={10,20,30};//编译错误,java语法不允许这样写
arr9=new int[3];//ok 数组arr9大小为3,内容为0 0 0
arr9=new int[]{10,20,30};//ok 数组arr9的大小为3,内容为10 20 30
// int[] arr10=new int[];//编译错误;方式一动态初始化方式必须写大小
//4关于数组的访问
int[] arr11=new int[3];//0 0 0
//通过length属性访问数组的大小,语法:数组名.length
System.out.println(arr11.length);//3
int[] arr12={10,20,30,40,50};//数组加内容
System.out.println(arr12.length);//5
//通过下标对数组进行访问和操作
//数组下标的特点:从0开始,到length-1结束
//语法:数组名【下标】
System.out.println(arr11[0]);//0
System.out.println(arr11[1]);//0
System.out.println(arr11[2]);//0
System.out.println(arr12[2]);//30
//将数组arr12中的20替换为200
arr12[1]=200;
System.out.println(arr12[1]);//200
//输出arr12数组中的最后一个元素
System.out.println(arr12[arr12.length-1]);//50 软编码方式
//System.out.println(arr12[5]);//运行错误
//arr12数组的大小为5,下标是0-4.数组越界
//将数组arr12中的所有元素内容输出
System.out.println(arr12);//[I@c3c749
//根据的是数组在内存中的地址值
//根据数组下标输出
for(int i=0;i<arr12.length;i++)
System.out.println(arr12[i]);
// Arrays.toString()方法能够将数组里的东西输出System.out.println(Arrays.toString(arr12));
//要求20和30交换位置,并输出交换后的内容
int[] arr14={10,20,30,40,50};
int m=0,n=0;
for(int i=0;i<arr14.length;i++){
if(arr14[i]==20)
m=i;
if(arr14[i]==30)
n=i;
}
int x;
x=arr14[m];
arr14[m]=arr14[n];
arr14[n]=x;
for(int i=0;i<arr14.length;i++)
System.out.println(arr14[i]);
//关于数组的复制 通过自己写代码的方式完成数组的复制
int[] arr15={10,20,30,40,50};
//属于静态初始化的方式,大小为5,内容为10,20,30,40,50
int[] arr16=new int[5];
//arr16属于动态初始化的方式,大小为5,内容为 0 0 0 0 0
System.out.println("复制前:"+Arrays.toString(arr16));
//思路:从arr15中取出元素内容放入arr16数组中
for(int i=0;i<arr15.length;i++)
arr16[i]=arr15[i];
System.out.println("复制后:"+Arrays.toString(arr16));
//使用java中提供的一种方法完成数组的复制
//System.out.println()
//System.in
//完成数组复制
//system.arraycopy(src,srcPos,dest,destPos,length)
/*
* src:源数组(要被复制的数组)
* srcPos:源数组的起始下标位置
* dest:目标数组
* destPos:目标数组的起始下标位置
* length:要复制的源数组的元素个数
*/
int[] arr17={2,5,7,9,11};//源数组
int[] arr18=new int[5];//目标数组
System.arraycopy(arr17, 1, arr18, 2, 3);
//System.arraycopy(arr17, 0, arr18, 0, arr17.length);
System.out.println("复制后:"+Arrays.toString(arr18));
//练习:将源数组arr17中的579复制到目标数组arr19中的最后三个位置
//使用Arrays。copyOf()方法完成数组的复制
//语法:目标数组=Arrays.copyOf(源数组,目标数组的长度)
int[] arr20={2,5,7,9,1};
int[] arr21=Arrays.copyOf(arr20,5);
System.out.println("目标数组:"+Arrays.toString(arr21));
//如果目标数组的长度小于源数组的长度,会进行截取操作
int[] arr22=Arrays.copyOf(arr20, 3);
System.out.println(Arrays.toString(arr22));//生成的目标数组arr22大小为3,源数组后的9,1会舍掉
//如果目标数组的长度大于源数组的长度,会进行填充 填充的内容:0 0.0 false null
double[] arr23={10.3,3.14,20.5};
double[] arr24=Arrays.copyOf(arr23, 6);
System.out.println(Arrays.toString(arr24));
boolean[] arr25={true,true,false,false,true};
boolean[] arr26=Arrays.copyOf(arr25, 8);
System.out.println(Arrays.toString(arr26));
String[] arr27={"a","c","d"};
String[] arr28=Arrays.copyOf(arr27,5);
System.out.println(Arrays.toString(arr28));
}
}
package com.lddx.day1031;
import java.util.Arrays;
import java.util.Random;
//冒泡排序算法
public class BulleSortDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int[] arr={89,23,65,4};
int[] arr=new int[1000000];
Random r=new Random();
for(int i=0;i<arr.length;i++)
arr[i]=r.nextInt(10000);
//i=0 1 2 3
long t1=System.currentTimeMillis();
for(int i=0;i<arr.length-1;i++){
//每一轮2个数之间的比较
/*
* i=0 j=0 1 2 3次比较
* i=1 j=0 1 2次比较
* i=3 j=0 1次比较
*/
for(int j=0;j<arr.length-1-i;j++)
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println(Arrays.toString(arr));
long t2=System.currentTimeMillis();
long t3=t2-t1;
System.out.println(t3);
}
}
package com.lddx.day1101;
import java.util.Arrays;
import java.util.Random;
//演示java中的排序
public class ArraySortDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//int[] arr={3,1,9,20,5};
int[] arr=new int[1000000];
Random r=new Random();
for(int i=0;i<arr.length;i++)
arr[i]=r.nextInt(10000);
//i=0 1 2 3
long t1=System.currentTimeMillis();
//System.out.println("排序前:"+Arrays.toString(arr));
/*
* Arrays.toString()
* Arrays.copyOf()
*
*/
Arrays.sort(arr);
// System.out.println("排序后:"+Arrays.toString(arr));
long t2=System.currentTimeMillis();
long t3=t2-t1;
System.out.println(t3);
}
}
package com.lddx.day1101;
import java.util.Scanner;
public class 数组练习 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入班级人数:");
int number=sc.nextInt();
double[] socre=new double[number];
String[] name=new String[number];
for(int i=1;i<=number;i++){
System.out.print("请输入第"+i+"位同学的姓名和成绩:");
name[i-1]=sc.next();
socre[i-1]=sc.nextDouble();
}
double max=0;
double min=100;
int a=0;
int b=0;
double sum=0.0;
for(int i=1;i<=number;i++){
if(max<socre[i-1]){
max=socre[i-1];a=i-1;
}
if(min>socre[i-1]){
min=socre[i-1];b=i-1;
}
sum+=socre[i-1];
}
System.out.println("总分:"+sum);
System.out.println("平均分:"+sum/number);
System.out.println("最高分:"+name[a]+"\t"+socre[a]);
System.out.println("最低分:"+name[b]+"\t"+socre[b]);
}
}