数组(小白)

一、数组

1、数据结构

数据结构:计算机中存储、组织数据的方式

2、数组概念

数组是用于存储多个数据,在内存空间中,是连续存储的。数组中的length属性,是用来计算数组的长度的,数组通过下标的方式进行访问,从0开始

3、数组声明

数组声明有三种方式:

  1. 静态声明,知道数组中的数据时,用静态声明

    数据类型[] 变量名 = new 数据类型[]{值,值,…}
    数据类型[] 变量名 = {值,值,…}

int[] arr1 = {1,2,3,4}
int[] arr2 = new int[]{2,3,4}
  1. 动态声明,不知道时用动态声明

需要指定长度,数组中保存的为对应类型的默认值
数据类型[] 变量名 = new 数据类型[长度];

int[] arr3 = new int[8];

4、数组使用

4.1 查询数组

数组[下标] 下标从0开始

// 1 查询 : 数组[下标] 下标从0开始
System.out.println(arr[3]);
// 最后一个数据
System.out.println(arr[4]);
System.out.println(arr[arr.length - 1]);

4.2 修改数组

数组[下标] = 值;

arr[2] = 33;

4.3 遍历数组

打印出数组中的数据

for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

5、数组异常

5.1 下标越界

java.lang.ArrayIndexOutOfBoundsException: 3
当下标小于0 或 大于等于length的时候,就会出现这个异常
image.png

5.2 空指针异常

java.lang.NullPointerException
当一个对象是null的时候,我们进行了成员属性访问,就会出现空指针异常
image.png

6、传值和传址

传值指的是基本类型传递
传址指的是引用类型传递

7、数组复制

public static void main(String[] args) {
    int[] src = { 1, 2, 3, 4, 5, 6 };
    int[] dest = { 11, 12, 13, 14, 15, 16 };
    // 把src中的4,5,6 放到 14,15,16 这里
    // m1(src, 3, dest, 3, 3);
    // 源数组 , 源数组起始位置 , 目标数组 , 目标数组起始位置 , 复制个数
    System.arraycopy(src, 3, dest, 3, 3);
    for (int i = 0; i < dest.length; i++) {
        System.out.println(dest[i]);
    }
}
public static void m1(int[] src, int srcIndex, int[] dest, int destIndex,
                      int length) {
    for (int i = 0; i < length; i++) {
        dest[destIndex] = src[srcIndex];
        destIndex++;
        srcIndex++;
    }
}

二、二维数组

1、数组声明

数据类型[][] 变量名 = {值,值,…}
数据类型[] 变量名 = new 数据类型[][]

int[][] arr == new int[10][];
//三角形
for(int i = 0;i < arr.length - 1;i++){
    arr[i] = new int[i+1];
}

2、数组使用

// 获取第一个一维数组中的第一个数据
int[] arr2_0 = arr2[0];
int arr2_0_0 = arr2_0[0];
System.out.println(arr2_0_0);
System.out.println(arr2[0][0]);

// 获取最后一个一维数组中的最后一个数据
int[] arr2_3 = arr2[arr2.length - 1];
int arr2_3_2 = arr2_3[arr2_3.length - 1];
System.out.println(arr2_3_2);
System.out
.println(arr2[arr2.length - 1][arr2[arr2.length - 1].length - 1]);

// 修改
// 把第二个一维数组中的第二个数据改成33
int[] arr2_1 = arr2[1];
arr2_1[1] = 33;
arr2[1][1] = 33;

// 遍历
for (int j = 0; j < arr2.length; j++) {
    // int[] arrJ = arr2[j];
    for (int k = 0; k < arr2[j].length; k++) {
        System.out.print(arr2[j][k] + "  ");
    }
    System.out.println();
}

3、接受用户输入

// 导入依赖包
import java.util.Scanner;

public class Array_09_Scanner {
    public static void main(String[] args) {
        // 接收用户输入
        Scanner scanner = new Scanner(System.in);

        // 程序执行到这里,就会进入等待,等待用户输入之后,再继续执行
        // next : 接收用户输入的数据,按回车终止
        // 并且 空格是分隔符,一个next 只能获取一个
        String input = scanner.next();
        System.out.println(input);

        // 接收一行,不需要分隔符, 按回车终止
        String input = scanner.nextLine();
        System.out.println(input);

        // 接收int类型的值,不能有汉字及特殊符号,必须是纯数字,小数点也不能有,
        // 否则会报错 java.util.InputMismatchException
        // 空格是分隔符
        int input = scanner.nextInt();
        System.out.println(input);

        // 具体用法同nextInt , 只是可以识别一个小数点
        double input = scanner.nextDouble();
        System.out.println(input);
    }
}

  • 13
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值