多条数据储存-数组

1.数组的存储方式

1.数组中分配固定的内存空间
2.每块空间大小相同
使用索引(下标)访问数组中的数据

在这里插入图片描述

2.数组定义

int []a={1,2,3,45,6};
int [] a =new int[5];
int [] a =new int []{ 1,2,3,45,6};

3.数组操作

在这里插入图片描述

获取数组长度:a.length
获取第一个元素:a[0]
访问索引为index的元素:a[index]----index是数组元素的位置
最后一个元素:a[a.length-1]

4.数组遍历

取出数组中的所有元素

/*
*循环
*/
for(int i =0;i<a.length;i++){
     System.out.print(a[i]);
}
/*
*for Each
*/
public static void bianli(int n){
for(int t : a){
   if(t==n){
      System.out.print(t);
       }
   }
}

5.数组常见异常

5.1 越界异常

访问数组不得超越数组索引的界限[0,a.length-1]

在这里插入图片描述

5.2类型异常

数组元素类型必须一致

在这里插入图片描述

6.数组辅助类-Arrays

方法名称描述案例
void sort(int [ ])对数组中的数排序Arrays.sort(a);
equals(int[ ],int[ ])判断两个数组是否相等Arrays.equals(a,b);
fill(long [ ] , long val)在数组中填入值Arrays.fill(a,6);
int[ ] copyOf(int [ ] , int newLength)将数组拷贝到新的数组中int [ ] b=Arrays.copyOf(a,10);
String toString(int [ ])将数组转换为字符串String str =Arrays.toString(a);

7.补充数组拷贝的方式

7.1 Arrays

int [] a ={1,2,3,4,5,6};
int [] b =Array.copyOf(a,7);

7.2 System

public static native void arraycopy(
Object src , //源(要拷贝的)数组
int srcPos, //源数组起始位置
Object dest, //目标数组
int destPos, //目标数组的起始位置
int length, // 拷贝长度
)

int [] src ={1,2,3,4,5};
int [] dest = new int [5];
System,arraycopy(src,0,dest,0,3);

8.实例

package com.zr.protectTest;

import java.util.Scanner;

/**
 * 学生管理系统
 */

public class protect {
	static String [][] students = new String[3][4]; //定义一个数组储存数据
	static Scanner sc =new Scanner(System.in); //定义输入框
	static int index = 0; //用于记录人数
//	static int total = 0; //用于计算总成绩
	/*
	 * 添加学生信息
	 */
	public static void add() {

		if(index>=students.length) {
			/*
			 * 扩容
			 */
			int newLengh = students.length+(students.length>>1);
			String [][] ss =new String[newLengh][4];//将原数组扩容1.5倍
			/*
			 * 数组拷贝
			 */
			for(int i =0; i<students.length;i++) {
				 ss[i]=students[i];//拷贝外层
				
			}
			students =ss;//连接新数组
		}
		
		
		String number ="dyit"+System.currentTimeMillis(); //随机生成学号
		
		System.out.print("请输入姓名:");
		String name = sc.nextLine();
		
		System.out.print("请输入科目:");
		String major = sc.nextLine();
		
		System.out.print("请输入成绩:");
		String grade = sc.nextLine();
		
		String stu[]= {number,name,major,grade}; //定义一个暂时存储点
		students[index++]= stu;//将信息存储进students数组中
	}
	/*
	 * 计算总成绩
	 */
	public static int scoreTotal() {
		int total = 0;
		for(int i =0;i<index;i++) {
			
			total+=Integer.parseInt(students[i][3]);//如果total在全局,方法的互相调用,这个值会累加
		}
		return total;
	}
	/*
	 * 计算平均成绩
	 */
	public static double averGrade() {
		double  averScore =1.0*scoreTotal()/index; //这里的total在scoreTotal()中,我们可以调用
		return averScore;
	}
	/*
	 * 统计及格人数
	 */
	public static int num() {
		int number=0;
		
		for(int i =0;i<index;i++) {//这里必须使用输入的人数index,若使用数组的长度就回越界
			
			int jige = Integer.parseInt(students[i][3]);
			if(jige>=60) {
				number++;
			}
			
		}
		return number;
	}
	/*
	 * 打印
	 */
	public static void print() {
//		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]);
//		}
		for(int i =0;i<students.length;i++) { //最外层
			for(int j =0; j<students[i].length;j++) {//里层
				System.out.println(students[i][j]);
			}
		}
	}
	/*
	 * 主程序
	 */
	public static void main(String[] args) {
		add();
		add();
		add();
		add();
		add();
		add();
		add();
		
		print();
		System.out.println("总成绩是:"+scoreTotal());
		System.out.println("平均成绩是:"+averGrade());
		System.out.println("及格人数是:"+num());
	}

}
package com.zr.protectTest;

import java.util.Random;

/**
 * 输出无重复的随机数
 * @author 86184
 *
 */
public class protect1 {
	static Random ran= new Random();//建立一个随机数
	static int[] a =new int[20];//建立数组
	public static boolean compare(int n) {//n表示产生的随机数
		for (int i : a) { //
			if(i==n) {
				return true;
			}
			
		}
		return false;
	}
	public static void main(String[] args) {
		int index=0;
		long S1=System.nanoTime();
		while(index<20) {//产生20个数					
			
				int n =ran.nextInt(20)+1;//1~20的随机数
				
				if(compare(n)) {	
					//System.out.print(n+"已经重复出现过"+" ");

				}else {
					a[index]=n;
					index++;
					System.out.print(n+" ");
					
				}
			
		}
		long S2=System.nanoTime();
		System.out.println("共用时间:"+(S2-S1)+"ns");
	}
	

}```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值