【java基础】数组 array

1.数组

数组特性

  • 一致性:数组只能保存相同数据类型元素,可以是任何相同的数据类型
  • 有序性:数组的元素是有序的,从0开始,通过下标访问。(如运用ASCII码值与数组空间对应。
  • 不可变性:数组初始化后,则长度(数组中的元素个数不变)不可变。(考虑存储空间的浪费、运算时间…

一维数组声明与初始化

  • 静态初始化:数组元素已知
int[] a= {
    
    1,2,3,4,5};

int[] c= new int[] {
    
    1,2,3,4,5};
  • 动态初始化:使用new运算符分配指定长度的内存空间
//元素数据类型 [] 数组变量名=new int[数组长度]
    	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][];//定义一个长度为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]);
	 
	 /*数组越界 >a.length */ 
	 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");
		}
	}

		/*
	 * for...each 循环(增强性for循环)
	 * 
	 */
	public static void bianli02(int[] c) {
    
    
		for (int t : c) {
    
    // 定义一个数组t用来暂存数组c中的每一个元素
			System.out.println(t + "\t");//打印数组c中的每一个元素,每个元素占一行
		}
	}
	/*
	 * 打印数组中a中所有的元素可以直接调用Arrays.toString(a)
	 * System.out.println(Arrays.toString(a));
	 */
}

!结果在这里插入图片描述

4.案例

在数组中存入n个不重复随机数

    /**
	 * 在数组中存储n个不重复随机数
	 * @param args
	 */

	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;//1-20随机数字
	    	boolean f=hasNum(t);//判断随机数t是否在数组中
	    	if(f) {
    
    
	    		System.out.println(t+"已经在数组中");	//f=true 已经在数组中
	    	}else {
    
    
	    		a[index]=t;//不在数组中 按index位置放入数组中
	    		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+" ");//仅打印数组中的元素
		}	
		}

在这里插入图片描述

数组扩容

学生成绩统计(求总分、平均成绩

/**
 * 运用二维数组统计学生信息..
 * 数组扩容
 * @author wdy
 *
 */
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	;//数组新长度=原数组长度*2
		String [][] ss=new String[newlength][4];//定义新数组ss
		
		for(int i=0;i<students.length;i++) {
    
    
			ss[i]=students[i];//将原数组中的元素拷贝到新数组
		}
		students=ss;//在非基本数据类型中=表示绑定连接,后续在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;//二维数组的值
	}
	
	/**
	 * for..each循环 遍历打印学生信息
	 */
	public static void print() {
    
    
//		for (String[] i : students) {//对
//			for (String j : i) {
    
    
//				System.out.print(j+"\t");
//			}
//		}
	
		System.out.print(Arrays.deepToString(students)+"\n");//调用Arrays.deepToString()打印整个二维数组
	    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;		
	}
	
	
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wdy00000/article/details/121645334