Java笔记——数组

一、数组的定义

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]);
                }
            }
        }
    }
}

​最后最后!!!

学会使用DEbug排错(是每个程序员必会技能之一)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唐富贵666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值