1.数组
数组特性
- 一致性:数组只能保存相同数据类型元素,可以是任何相同的数据类型
- 有序性:数组的元素是有序的,从0开始,通过下标访问。(如运用ASCII码值与数组空间对应。
- 不可变性:数组初始化后,则长度(数组中的元素个数不变)不可变。(考虑存储空间的浪费、运算时间…
一维数组声明与初始化
int[] a= {
1,2,3,4,5};
int[] c= new int[] {
1,2,3,4,5};
- 动态初始化:使用new运算符分配指定长度的内存空间
int[] a=new int[10];
二维数组声明与初始化
public static void main(String[] args) {
int[] [] a= {
{
1,2},{
2,3,3},{
2,3,4,5,6}};
int[] [] b=new int[3][];
}
2.数组的性质
- 数组越界报错
-array index out of bounds
int[] a ={
1,2,3,4,5};
System.out.println("长度"+a.length);
System.out.println(a[0]);
System.out.println(a[a.length-1]);
System.out.println(a[9]);
数组长度
数组初始位置
数组的最后一个位置
数组越界
3.数组遍历
用循环遍历
用 for…each 循环(增强型for循环)遍历
public static void main(String[] args) {
int[] a = {
1, 2, 3, 4, '\u4e00' };
System.out.println("使用循环遍历");
bianli01(a);
System.out.println("\nfor...each循环");
bianli01(a);
}
public static void bianli01(int[] b) {
for (int i = 0; i < b.length; i++) {
System.out.print(b[i] + "\t");
}
}
public static void bianli02(int[] c) {
for (int t : c) {
System.out.println(t + "\t");
}
}
}
4.案例
在数组中存入n个不重复随机数
static Random ran = new Random();
static final int size=10;
static int[] a =new int[size];
public static void main(String[] args) {
int index=0;
long s1=System.nanoTime();
while(index<size){
int t =ran.nextInt(20)+1;
boolean f=hasNum(t);
if(f) {
System.out.println(t+"已经在数组中");
}else {
a[index]=t;
index++;
}
}
print();
long s2=System.nanoTime();
System.out.println("耗时:"+(s2-s1));
}
public static boolean hasNum(int n) {
for (int t : a) {
if(t==n) {
return true;
}
}return false;
}
public static void print(){
for (int x : a) {
System.out.print(x+" ");
}
}
数组扩容
学生成绩统计(求总分、平均成绩
public class Suzhu6 {
static Scanner sc=new Scanner(System.in);
static String[][] students=new String[3][4];
static int index=0;
static int tol=0;
public static void main(String[] args) {
add();
add();
add();
print();
System.out.println("学生总成绩:"+socreTol());
System.out.println("学生平均成绩:"+stuavg());
System.out.println("及格学生人数:"+passNum());
}
public static void add() {
if(index>students.length) {
int newlength=students.length*2 ;
String [][] ss=new String[newlength][4];
for(int i=0;i<students.length;i++) {
ss[i]=students[i];
}
students=ss;
}
System.out.print("请输入姓名:");
String name=sc.nextLine();
System.out.print("请输入科目:");
String sub=sc.nextLine();
System.out.print("请输入成绩:");
String score=sc.nextLine();
String stuId="id."+System.currentTimeMillis();
String[] stu= {
stuId,name,sub,score};
students[index++]=stu;
}
public static void print() {
System.out.print(Arrays.deepToString(students)+"\n");
for(int i=0;i<index;i++) {
System.out.println("学号:"+students[i][0]);
System.out.println("姓名:"+students[i][1]);
System.out.println("科目:"+students[i][2]);
System.out.println("成绩:"+students[i][3]+"\n");
}
}
public static int socreTol() {
for(int i=0;i<index;i++) {
tol+=Integer.parseInt(students[i][3]);
}
return tol;
}
public static double stuavg() {
return 1.0*tol/index;
}
public static int passNum() {
int num =0;
for(int i=0;i<index;i++) {
int score=Integer.parseInt(students[i][3]);
if(score>=60) {
num++;
}
}return num;
}
}