Java(五) -- 数组

本文详细介绍了Java中的数组,包括基本要素、常见错误、常用操作如求最大值、最小值、插入数据、排序等。同时展示了如何使用Arrays工具类,以及二维数组的运用。并提供了一个用户管理系统案例,涵盖了查询、添加、删除、冻结和解冻用户等功能。
摘要由CSDN通过智能技术生成

目录

数组

数组的基本要素

数组常见的错误

数组的常用操作及方法

求数组的最大值

求数组的最小值

在数组的指定位置插入数据

对数组进行排序(冒泡排序)

 Arrays 常用属性:

二维数组

案例:用户管理系统


数组

        数组就是一种可以存储大量数据类型相同的变量的数据结构,数组就是一个具有相同数据类型的数据集合。

        数组中的数据必须是同一种数据类型的。

数组的基本要素

  • 数组名称

  • 数组元素

  • 元素下标

  • 数据类型

数组本身就是一个变量,数组名称就是变量名,数组中保存的每一个数据都会有一个下标(从 0 开始)

//声明数组
int[] array;
//分配内存空间
array = new int[6];
//给数组赋值
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
array[4] = 5;
array[5] = 6;
​
int[] array2 = {1,2,3,4,5,6};
int[] array3 = new int[]{1,2,3,4,5,6};

数组常见的错误

  • 数据类型不匹配。

  • 边声明边赋值的方式,代码必须写在同一行,不能换行。

  • 数组下标越界异常(ArrayIndexOutOfBoundsException)。

数组的常用操作及方法

  • 求数组的最大值

public static void main(String[] args) {
    int[] array = {11, 2, 35, 24, 85,3};
    int max = array[0];
    for (int i = 0; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
        }
    }
    System.out.println("数组中的最大值是:" + max);
}
  • 求数组的最小值

public static void main(String[] args) {
    int[] array = {11, 2, 35, 24, 85,3};
    int min = array[0];
    for (int i = 0; i < array.length; i++) {
        if (array[i] < min) {
            min= array[i];
        }
    }
    System.out.println("数组中的最小值是:" + min);
}
  • 在数组的指定位置插入数据

public class Test2 {
    public static void main(String[] args) {
        int[] array = {99, 87, 85, 66, 53, 20};
        int num = 83;
        // 将83插入到数组下标为3的位置
        int[] newArray = new int[array.length + 1];
        // 将原数组中的数据移动到新数组中
        for (int i = 0; i < 3; i++) {
            newArray[i] = array[i];
        }
        for (int i = 4; i < newArray.length; i++) {
            newArray[i] = array[i - 1];
        }
        newArray[3] = num;
        System.out.println("添加新元素之前的数组: " + Arrays.toString(array));
        System.out.println("添加新元素之后的数组: " + Arrays.toString(newArray));
    }
}
  • 对数组进行排序(冒泡排序)

public class Test3 {
    public static void main(String[] args) {
        int[] array = {20, 87, 53, 99, 85, 60};
        for (int i = 0; i < array.length - 1; i++) {
            for (int j = i; j < array.length - i - 1; j++) {
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(array));
    }
}
  •  Arrays 常用属性:

public class Test4 {
    public static void main(String[] args) {
        int[] arrays = {20, 87, 53, 99, 85, 60};
        int[] array1 = {20, 87, 53, 99, 85, 60};
        int[] array2 = {99, 88, 77, 66, 55};
        // 排序
        Arrays.sort(arrays);
        System.out.println(Arrays.equals(arrays,array1));   // true
        System.out.println(Arrays.toString(arrays));    // [20, 53, 60, 85, 87, 99]
        // 查询数字在数组中的索引
        int index = Arrays.binarySearch(arrays,87);
        System.out.println(index);      // 4
        // 复制数组
        int[] copyArray = Arrays.copyOf(array2,3);
        System.out.println(Arrays.toString(copyArray));     // [99, 88, 77]
        // 将数组元素全部替换为65
        Arrays.fill(array1,65);
        System.out.println(Arrays.toString(array1));    // [65, 65, 65, 65, 65, 65]
    }
}

二维数组

二维数组简单理解即一维数组中保存的值是另外一个一维数组。

public class Test5 {
    public static void main(String[] args) {
        // 声明
        int[][] array;
        // 开辟内存空间
        array = new int[2][3];
        // 赋值
//        array[0][0] = 20;
//        array[0][1] = 30;
//        array[0][2] = 60;
//        array[1][0] = 10;
//        array[1][1] = 50;
//        array[1][2] = 100;
//        System.out.println(Arrays.toString(array));

//        int[] item = {20, 30, 60};
//        int[] item2 = {10, 50, 100};
//        array[0] = item;
//        array[1] = item2;

        int[][] array1 ={{20, 30, 60},{10, 50, 100}};
        String str = "";
        for (int i = 0; i < array1.length; i++) {
            str += Arrays.toString(array1[i]);
        }
        System.out.println(str);    // [20, 30, 60][10, 50, 100]
    }
}

变量、数据类型、流程控制、循环、数组。

案例:用户管理系统

  • 查询用户:将系统中保存的全部用户信息在控制台打印输出。

  • 添加用户:向系统中添加新的用户信息,如果添加的用户已经存在,给出提示信息。

  • 删除用户:输入用户名,进行删除操作,若输入的用户名不存在,给出提示信息。

  • 账号冻结:输入用户名,进行冻结操作,若输入的用户名不存在或者该用户已经被冻结,给出相应提示。

  • 账号解冻:输入用户名,进行解封操作,若输入的用户名不存在或者该用户状态正常,给出相应提示。

  • 退出系统:跳出循环,给出提示信息。

import java.util.Arrays;
import java.util.Scanner;

public class Test6 {
    // 初始化用户数据(用户名、年龄、状态)
    static String[] names = {"张三", "李四", "王五", "小明"};
    static int[] ages = {19, 25, 28, 17};
    static String[] states = {"正常", "正常", "正常", "正常"};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num;
        do {
            System.out.println("------ 欢迎使用用户管理系统 ------");
            System.out.println("------     1.查询用户     ------");
            System.out.println("------     2.添加用户     ------");
            System.out.println("------     3.删除用户     ------");
            System.out.println("------     4.账号冻结     ------");
            System.out.println("------     5.账号解冻     ------");
            System.out.println("------     6.退出系统     ------");
            System.out.print("请选择: ");
            num = scanner.nextInt();
            switch (num){
                case 1:
                    System.out.println("------     用户查询     ------");
                    System.out.println("编号\t\t姓名\t\t年龄\t\t状态");
                    for (int i = 0; i < names.length; i++) {
                        if (names[i] != null){
                            System.out.println((i + 1) + "\t\t" + names[i] + "\t\t" + ages[i] + "\t\t" + states[i]);
                        }
                    }
                    System.out.print("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 2:
                    System.out.println("------     添加用户     ------");
                    System.out.print("请输入用户姓名: ");
                    String name = scanner.next();
                    boolean flag = nameIsExist(name);
                    if (flag) {
                        System.out.println(name + "已存在,请勿重复添加!!!");
                    } else {
                        if (names[names.length - 1] != null){
                            // 创建新的数组,并且将老数组的值存入新的数组
                            names = Arrays.copyOf(names,names.length + 1);
                            names[names.length-1] = name;
                            System.out.print("请输入" + name + "的年龄: ");
                            int age = scanner.nextInt();
                            ages = Arrays.copyOf(ages,ages.length + 1);
                            ages[ages.length - 1] = age;
                            states = Arrays.copyOf(states,states.length + 1);
                            states[states.length - 1] = "正常";
                            System.out.println(name + "添加成功!!!");
                        } else {
                            int index = getFirstNull();
                            names[index] = name;
                            System.out.print("请输入" + name + "的年龄: ");
                            int age = scanner.nextInt();
                            ages[index] = age;
                            states[index] = "正常";
                        }
                    }
//                    if (names[names.length - 1] != null){
//                        System.out.println("内存已满,新用户无法添加!!!");
//                    } else {
//                        System.out.print("请输入用户姓名: ");
//                        String name = scanner.next();
//                        boolean flag = nameIsExist(name);
//                        if (flag) {
//                            System.out.println(name + "已存在,请勿重复添加!!!");
//                        } else {
//                            names[names.length - 1] = name;
//                            System.out.print("请输入" + name + "的年龄: ");
//                            int age = scanner.nextInt();
//                            ages[ages.length - 1] = age;
//                            states[states.length - 1 ] = "正常";
//                            System.out.println(name + "添加成功!!!");
//                        }
//                    }
                    System.out.print("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 3:
                    System.out.println("------     删除用户     ------");
                    if (names[0] == null) {
                        System.out.println("用户已全部删除!!!");
                    } else {
                        System.out.print("请输入要删除的用户名: ");
                        name = scanner.next();
                        if (nameIsExist(name)) {
                            int index = getIndex(name);
                            if (index >= 0){
                                for (int i = index; i < names.length - 1; i++) {
                                    names[i] = names[i + 1];
                                    ages[i] = ages[i + 1];
                                    states[i] = states[i + 1];
                                }
                                names[names.length - 1] = null;
                                ages[ages.length - 1] = 0;
                                states[states.length - 1] = null;
                                System.out.println("删除用户成功!!!");
                            }
                        } else {
                            System.out.println("您输入的用户名不存在!!!");
                        }
                    }
                    System.out.print("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 4:
                    System.out.println("------     账号冻结     ------");
                    System.out.print("请输入用户姓名: ");
                    name = scanner.next();
                    if (nameIsExist(name)) {
                        int index = getIndex(name);
                        String state = states[index];
                        if (state.equals("冻结")) {
                            System.out.println(name + "账号已冻结,请勿重复冻结!!!");
                        } else {
                            states[index] = "冻结";
                            System.out.println(name + "冻结成功!!!");
                        }
                    } else {
                        System.out.println("您输入的用户不存在!!!");
                    }
                    System.out.print("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 5:
                    System.out.println("------     账号解冻     ------");
                    System.out.print("请输入用户姓名: ");
                    name = scanner.next();
                    if (nameIsExist(name)) {
                        int index = getIndex(name);
                        String state = states[index];
                        if (state.equals("正常")) {
                            System.out.println(name + "账号已恢复正常,请勿重复操作!!!");
                        } else {
                            states[index] = "正常";
                            System.out.println(name + "成功解封!!!");
                        }
                    } else {
                        System.out.println(name + "不存在,请重新输入!!!");
                    }
                    System.out.print("输入0返回上级菜单");
                    num = scanner.nextInt();
                    break;
                case 6:
                    System.out.println("感谢使用本系统,再见!!!");
                    break;
            }
        }while (num == 0);
    }

    /**
    * 判断用户输入的姓名是否已经存在
    * */
    public static boolean nameIsExist(String name) {
        for (int i = 0; i < names.length; i++) {
            if (name.equals(names[i])) {
                return true;
            }
        }
        return false;
    }

    /**
    * 找到名字在数组中的下标
    * */
    public static int getIndex(String name) {
        for (int i = 0; i < names.length; i++) {
            if (name.equals(names[i])) {
                return i;
            }
        }
        return -1;
    }

    /**
     * 找到数组中第一个为空的索引
     */
    public static int getFirstNull() {
        for (int i = 0; i < names.length; i++) {
            if (names[i] == null) {
                return i;
            }
        }
        return -1;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bug 消灭师

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

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

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

打赏作者

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

抵扣说明:

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

余额充值