一、数组的定义
1、基本概念
定义:相同类型的数据统一聚拢在一起,他就是数组
数组可以存放多个同一类型的数据,数组也是一种数据类型,是引用类型。
【定义】:
定义:
int[] nums;
初始化:
nums = new int[3];
赋值:
nums[0] = 1;
nums[1] = 2;
nums[3] = 3;
//直接定义并初始化
int[] nums = {1,2,3};
//also
int[] nums = new int[5];
int[] nums = new int[]{1,2,3,4,5};
//数组属性,可获得数组长度
nums.length
数据结构层面:
第一步,在栈中定义一个变量nums,指针指向变量数组在堆中第一为的地址
第二部,在堆中开辟一块连续的空间,并加上默认值(初始化)
第三步,使用下标赋值
问题:
初始化后会有默认值 0
赋值不能越界
2、数组的性质
1、长度不能改变
2、每个位置只能存放一个
3、数组创建后会有默认值
4、下标从0 开始,只能在指定范围内使用
5、长度属性(length)
6、数组里可以是基本类型,也可以是引用类型
二、玩转数组
1、遍历打印数组
int i = 0;
while (i<nums.length){
System.out.println(nums[i]);
i++;
}
2、数组查找某一个值
import java.sql.SQLOutput;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
int[] nums = {1,2,3,4,5,6};
Scanner scanner = new Scanner(System.in);
int target = scanner.nextInt();
int result = -1;
for (int i = 0; i < nums.length; i++) {
if(nums[i] == 5){
result = i;
break;
}
}
if(result<0 || result>nums.length-1){
System.out.println("该数字无记录");
}else {
System.out.println("有记录");
System.out.println(nums[result]);
}
}
}
3、打擂台式找最值
public class Demo03 {
public static void main(String[] args) {
int[] salsry = {-1,5,8,5,3,3,76,12129,6,545};
//找最大值
// int maxIndex = 0;
// for (int i = 1; i < salsry.length; i++) {
// if(salsry[maxIndex]<salsry[i]){
// maxIndex = i;
// }
// }
// System.out.println(salsry[maxIndex]);
//找最小 同理
int minIndex = 0;
for (int i = 1; i < salsry.length; i++) {
if(salsry[minIndex]> salsry[i]){
minIndex = i;
}
}
System.out.println(salsry[minIndex]);
}
}
4、元素的位移
public class Demo04 {
public static void main(String[] args) {
int nums[] = {1,2,3,4};
int temp = nums[2];
nums[2] = nums[3];
nums[3]= temp;
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
}
5、数组的扩容
本质上在原有的数组上进行扩容是做不到的,需要一些手段。
第一步:定义一个数组
第二步:定义新数组的长度为扩容长度
第三步:迁移数组数据
第四步:重新指向临时变量
【演示】
public class Demo05 {
public static void main(String[] args) {
int nums[] = {1,2,3};
//扩容过程
int temp[] = new int[nums.length*2];
//拷贝数据
for (int i = 0; i < nums.length; i++) {
temp[i] = nums[i];
}
//重新指向nums
nums = temp;
nums[5] = 40404;
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
}
6、数组的反转
1)创建反向数组,挨个放入。
public class Demo06 {
public static void main(String[] args) {
int nums[] = {1,2,3,4,34,34,2,312,2};
int temp[] = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
temp[i] = nums[nums.length-1-i];
}
nums = temp;
for (int i = 0; i < nums.length; i++) {
System.out.println(temp[i]);
}
}
}
2)数组内容首尾两两交换
public class Demo07 {
public static void main(String[] args) {
int nums[] = {1,2,3,4,5,6,7,8,9,0};
int temp;
for (int i = 0; i < nums.length/2; i++) {
temp = nums[i];
nums[i] = nums[nums.length-1-i];
nums[nums.length-1-i] = temp;
}
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
}
终极综合练习
实现员工管理系统
import java.util.Scanner;
public class Demo08 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int nums[] = new int[2];
int currnetIndex = -1;
int flag = 1;
while (true){
System.out.println("请选择功能:1添加工号 2 查找工号 3 打印工号 4 退出");
int function = scanner.nextInt();
if (function ==4){
break;
}
if (function==1){
System.out.println("请输入要添加得工号");
int num = scanner.nextInt();
//判断是否需要扩容
currnetIndex++;
//不满足条件先去扩容
if (currnetIndex > nums.length-1){
int[] temp = new int[nums.length*2];
for (int i = 0; i < nums.length; i++) {
temp[i] = nums[i];
}
nums = temp;
}
nums[currnetIndex] = num;
}
if (function==2) {
System.out.println("请输入查找得工号");
int target = scanner.nextInt();
int result = -1;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target) {
result = i;
break;
}
}
System.out.println(result==-1?"没有": "存在"+nums[result]);
}
if (function==3){
for (int i = 0; i < nums.length; i++) {
System.out.println(nums[i]);
}
}
}
}
}