Java基础(数组)

一、数组

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

  • 基本要素:数组名称、数组元素、元素下标、数据类型
    数组本身就是一个变量,数组本身就是变量名,数组中保存的每一个数据都有一个下标(从0开始)
  • 先创建再复制
// 声明数组
        int[] arr; // 也可 int arr[]
        String arr2[];
        // 分配内存空间
        arr = new int[10]; // int[] arr = new int[10]
        // 给数组赋值
        arr[2] = 6;
        System.out.println(arr); // [I@28d93b30  arr对应的内存地址
        System.out.println(Arrays.toString(arr)); //[0, 0, 6, 0, 0, 0, 0, 0, 0, 0]
int arr[] = new int[4];
        arr[0] = 179;
        arr[1] = 182;
        arr[2] = 167;
        arr[3] = 155;
        int sum = 0;
        for (int i = 0; i < arr.length ; i++) {
            sum = sum + arr[i];
        }
        System.out.println(sum/arr.length);
  • 边创建边赋值
int arr[] = {1,2,3,4,5,6};
int arr2[] = new int[]{1,2,3,4,5,6};
int arr[] = new int[100];
        for (int i = 0; i <= arr.length; i++) {
            arr[i] = i;
        }
        System.out.println(Arrays.toString(arr));
  • 数组常见错误

数据类型不匹配
边声明边赋值的方式,代码必须写在同一行
数组下标越界

  • 数组常用操作及方法

求数组中的最大值

int arr[] = new int[]{1,2,3,4};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
   if(arr[i] > max){
           max = arr[i];
   } 
}
System.out.println("数组中最大值是:"+max);

求数组中的最小值

int arr[] = new int[]{1,2,3,4};
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
       if(arr[i] < min){
          min = arr[i];
       } 
}
System.out.println("数组中最大值是:"+min);

在数组中指定位置插入数组

int arr[] = new int[]{2,5,8,6};
int arr2[] = new int[arr.length+1];
Scanner scanner = new Scanner(System.in);
System.out.print("请输入要插入的位置:");
int index = scanner.nextInt();
System.out.print("请输入要插入的值:");
int value =scanner.nextInt();
arr2[index-1] = value;
for (int i = 0; i < index-1; i++) {
      arr2[i] = arr[i];
}
for (int i = index; i < arr2.length ; i++) {
     arr2[i] = arr[i-1];
}
System.out.println(Arrays.toString(arr2));

对数组进行排序

int arr[] = new int[]{73,80,32,58,99,12};
for (int i = 0; i < arr.length-1; i++) {
      for (int j = 0; j < arr.length-i-1; j++) {
           if(arr[j] > arr[j+1]){
               int temp = arr[j];
               arr[j] = arr[j+1];
               arr[j+1] = temp;
            }
       }

}
System.out.println(Arrays.toString(arr));
  • 常用方法
int arr[] = new int[]{1,2,3,4};
        int arr2[] = new int[]{1,2,3,4};
        int arr3[] = new int[]{1,2};
        // 判断两个数组是否相等
        boolean equals = Arrays.equals(arr, arr2);
        // 排序
        Arrays.sort(arr); // 升序
        // 填充数值
        Arrays.fill(arr,66);// 覆盖所有元素
        // 复制
        int[] copyOf = Arrays.copyOf(arr, 10);
        System.out.println(Arrays.toString(copyOf)); // [66, 66, 66, 66, 0, 0, 0, 0, 0, 0]
        // 返回1的值在数组arr中的下标 binarySearch(二分查找法  数组必须有序)
        int index = Arrays.binarySearch(arr, 1);

二、二维数组

即一维数组中保存的值是另外一个一维数组

 // 声明
        int array[][];
        // 开辟内存空间
        array = new int[3][3];
        // 赋值
        array[0][0] = 50;
        array[0][1] = 60;
        array[0][2] = 70;
        array[1][0] = 80;
        array[1][1] = 90;
        array[1][2] = 100;
//        int item[] = {50,60,70};
//        int item2[] = {80,90,100};
//        array[0] = item;
//        array[2] = item2;
        //int array2[][] = {{50,60,70},{80,90,100}};
        String str = "";
//        for (int i = 0; i < array.length; i++) {
//            str += Arrays.toString((array[i]));
//        }
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println(array[i][j]);
            }
        }
        //System.out.println(str);
 int array[][] = new int[3][6];
        int sum = 0;
        for (int i = 0; i < array.length; i++) {
            System.out.println("----第"+(i+1)+"层货架----");
            for (int j = 0; j < array[i].length; j++) {
                int num = (i+1)*(j+1);

                sum += num;
                System.out.println("第"+(j+1)+"隔档的鸡蛋个数"+num);
            }
        }
        System.out.println("鸡蛋的总数是"+sum);
    

用户管理系统

查询用户:将系统中保存的全部用户信息在控制台打印输出
添加用户:向系统中添加新的用户信息,如果添加的用户已存在,给出提示信息
删除用户:输入用户名,进行删除操作,若输入的用户名不存在,给出提示信息
账户冻结:输入用户名,进行冻结操作,若输入的用户名不存在或者该用户已经被冻结,给出相应的提示
账户解冻:输入用户名,进行解封操作,若输入的用户名不存在或者该用户状态正常,给出相应的提示
退出系统:跳出循环,给出提示信息

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

/**
 * @author:liudongdong
 * @date 2022/5/9 8:52 下午
 */
public class Test24 {
    static String names[] = {"张三","李四","王五"};
    static int ages[] = {22,23,24};
    static String states[] = {"正常","正常","正常"};
    public static  void main(String[] args) {
        // 初始化用户数据(用户名、年龄、状态)
        //Object data[] = {"张三",22,"正常"};
        Scanner scanner = new Scanner(System.in);
        int num = 0;
//        String names[] = {"张三","李四","王五"};
//        int ages[] = {22,23,24};
//        String states[] = {"正常","正常","正常"};
        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.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("------添加用户------");
//                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("请输入用户年龄:");
//                        int age = scanner.nextInt();
//                        ages[ages.length-1] = age;
//                        states[states.length-1] = "正常";
//                        System.out.println("用户添加成功");
//                    }
//                }
                System.out.print("请输入用户姓名:");
                String name = scanner.next();
                if(names[names.length - 1] != null){
                    // 创建新的数组,并且将老数组的值存入新的数组
                    names = Arrays.copyOf(names, names.length + 1);
                    names[names.length-1] = name;
                    System.out.print("请输入用户年龄:");
                    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("用户添加成功");
                }else{
                    int firstNull = getFirstNull();
                    names[firstNull] = name;
                    System.out.print("请输入用户年龄:");
                    int age = scanner.nextInt();
                    ages[firstNull] = age;
                    states[firstNull] = "正常";
                    System.out.println("用户添加成功");
                }
                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);
                    if (states[index].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);
                    if (states[index].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 6:
                System.out.println("退出系统");
                break;
//            default:
//                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;
    }
}

你可能感兴趣的:(Java基础(数组))