多条数据储存-数组
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");
}
}```