Java程序设计基础学习笔记——数组

本文介绍了Java中数组的使用,包括动态和静态初始化方式,以及数组的长度获取。文中还展示了如何创建一个包含26个字符的数组,并打印出A至Z。此外,讨论了数组作为引用类型在赋值时的引用传递特性,通过示例展示了当一个数组引用被赋给另一个变量时,改变其中一个数组元素会影响到原始数组。
摘要由CSDN通过智能技术生成

以下笔记整理自B站UP主韩顺平【零基础 快速学Java】韩顺平 零基础30天学会Java课程

数组的长度

可以通过数组名.length得到数组的大小/长度

数组的使用

使用方式1——动态初始化

//数组的定义
//数据类型 数组名[] = new 数据类型[大小]
int a[] = new int[5];  // 创建了一个数组,名字为a,存放5个int
//或者
//数据类型[] 数组名 = new 数据类型[大小]
int[] a = new int[5];

使用方式2——动态初始化

//先声明数组
//语法:数据类型 数组名[]; 或者 数据类型[] 数组名;
int a[]; 或者 int[] a;  //这时a是null
//创建数组
//语法:数组名 = new 数据类型[大小];
a = new int[5];  //分配内存空间,可以存放数据

使用方式3——静态初始化

//初始化数组
//语法:数据类型 数组名[] = {元素值, 元素值, ... };
int a[] = {1, 2, 3, 4, 5};

数组属于引用类型,数组型数据是对象(object)

数组练习

创建一个char类型的26个元素的数组,分别放置'A'~'Z',使用for循环访问所有的元素并打印出来。

public class Array {

    public static void main(String[] args) {

        char[] chars = new char[26];

        for(int i = 0; i < chars.length; i ++)
        {
            chars[i] = (char)('A' + i);  //'A' + i是int类型,要强制类型转换
        }

        for(int i = 0; i < chars.length; i ++)
        {
            System.out.print(chars[i] + " ");
        }
    }
}

数组赋值机制

基本数据类型赋值,赋值方式为值拷贝

数组在默认情况下是引用传递,赋的值是地址

public class ArrayAssign {

    public static void main(String[] args) {

        //基本数据类型赋值,赋值方式为值拷贝
        //数组在默认情况下是引用传递,赋的值是地址
        int[] arr1 = {1, 2, 3};
        int[] arr2 = arr1;  //arr2的变化会影响arr1
        arr2[0] = 10;
        System.out.println("=====arr1的元素值如下=====");
        for(int i = 0; i < arr1.length; i ++) {
            System.out.print(arr1[i] + " ");  //10 2 3
        }
    }
}
//输出结果
=====arr1的元素值如下=====
10 2 3

值传递和引用传递的区别

二维数组内存布局

二维数组的使用

动态初始化——列数不确定(一维数组的个数可以不相同)

public class TwoDimensionalArray {

    public static void main(String[] args) {

        /*
        动态创建下面二维数组,并输出
        i = 0: 1
        i = 1: 2 2
        i = 2: 3 3 3
        有一个二维数组,每个一维数组的元素是不一样的
        */

        //创建二维数组,但是只是确定一维数组的个数,每个一维数组还没有开数据空间
        int[][] arr = new int[3][];  

        for( int i = 0; i < arr.length; i ++ ) {  //遍历arr每个一维数组
            //给每个一维数组开空间 new
            //如果没有给一维数组 new,那么arr[i]就是null
            arr[i] = new int[i + 1];

            //遍历一维数组,并给一维数组的每个元素赋值
            for( int j = 0; j < arr[i].length; j ++ ) {

                arr[i][j] = i + 1;  //赋值
            }

        }

        //遍历arr输出
        for( int i = 0; i < arr.length; i ++ ) {
            //输出arr的每个一维数组
            for( int j = 0; j < arr[i].length; j ++ ) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.print("\n");  //换行
        }
    }
}

对比C语言

定义数组时对第一维的长度可以不定义,但必须定义第二维的长度

例:

int a [] [3] = {1, 2, 3, 4, 5, 6};

系统会根据输入的总个数分配存储空间,易知这个二维数组有二行;

静态初始化

例:

int[][] arr = {{1,1,1}, {8,8,9}, {100}};

解读

1. 定义了一个二维数组 arr

2. arr 有三个元素(每个元素都是一维数组)

3. 第一个一维数组有 3 个元素 , 第二个一维数组有 3 个元素, 第三个一维数组有 1 个元素

杨辉三角

import java.util.Scanner;

public class YangHui {

    public static void main(String[] args) {

        Scanner myScanner = new Scanner(System.in);
        System.out.println("请输入所要生成的杨辉三角的行数:");
        int length = myScanner.nextInt();
        int[][] yanghui = new int[length][];

        for( int i = 0; i < yanghui.length; i ++ ) {

            //给每个一维数组分配空间
            yanghui[i] = new int[i + 1];

            for( int j = 0; j <  yanghui[i].length; j ++ ) {

                if(j == 0 || j == yanghui[i].length - 1) {
                    yanghui[i][j] = 1;  //每行第一个元素和最后一个元素都赋值为1
                } else {
                    yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
                }
            }
        }

        for( int i = 0; i < yanghui.length; i ++ ) {

            for( int j = 0; j < yanghui[i].length; j ++ ) {

                System.out.print(yanghui[i][j] + " ");
            }
            System.out.println();
        }
    }
}

二维数组使用细节和注意事项

二维数组练习

布尔类型的数组不给定初值默认是false

生成随机整数

(int)(Math.random() * 100) + 1  //生成 1 ~ 100 的随机整数

感谢抽出宝贵时间阅读的各位小读者们,创作不易,如果感觉有帮助的话,帮忙点个赞再走吧!你的支持是我创作的动力,希望能带给大家更多优质的文章。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AoXin_TechJZ.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值