Java的第四篇文章——数组

简介: Java的第四篇文章——数组

第四章 数组

学习目标

  • 了解数据概念
  • 数组创建
  • 从数组中存取数据
  • 遍历数组
  • 数组中元素的默认值
  • 数组内存分析
  • 多维数组
  • 数组练习

1.数组概念

一组相同类型数据的容器。

  • 相同类型:Java语言要求存入数组的数据类型必须一致
  • 容器:类似于生活中存放物品的容器,在编程的世界中,『容器』可以用来存放数据
  • 一组:容器中可以存放多个数据

2.声明数组变量

int[] ageArray;
String[] nameArray;
double salaryArray [];

虽然[]也可以放在变量名的后面,但是还是建议放在类型的后面。

// 声明数组时不能在方括号中指定数组长度
char[5] tipArray;

3.创建数组对象

3.1 指定长度创建数组

int[] ageArray = new int[5];

3.2 直接赋值创建数组

此时[]中不能写数组指定长度

String nameArray = new String[]{"foo", "bar", "biz"};
//此时的长度就是3

也可以这么写:

int[] numberArray = {5, 7, 11, 13, 17, 19};
//后面的{}就是一个对象

4.将数据存入数组

String nameArray = new String[3];
int[] numberArray = new int[5];
ageArray[0] = 10;
ageArray[1] = 11;
ageArray[2] = 12;
ageArray[3] = 13;
ageArray[4] = 14;
nameArray[0] = "aaa";
nameArray[1] = "bbb";
nameArray[2] = "ccc";

5.从数组中读取数据

System.out.println("ageArray[0] = " + ageArray[0]);
System.out.println("ageArray[1] = " + ageArray[1]);
System.out.println("ageArray[2] = " + ageArray[2]);
System.out.println("ageArray[3] = " + ageArray[3]);
System.out.println("ageArray[4] = " + ageArray[4]);
System.out.println("nameArray[0] = " + nameArray[0]);
System.out.println("nameArray[1] = " + nameArray[1]);
System.out.println("nameArray[2] = " + nameArray[2]);

6.遍历数组

// 6.遍历数组(通过循环依次读取数组中的每一个值)
// 遍历数组的起点:数组下标0
// 遍历数组的终点:数组长度-1
for (int i = 0; i < ageArray.length; i++) {
    // 在遍历过程中,使用i作为数组下标访问每一个数组元素
    int age = ageArray[i];
    System.out.println("age = " + age);
}

注:生成遍历数组的for循环模板的快捷键是数组变量名.fori

7.数组必须创建对象在访问元素

8.数组中元素默认值

9.内存分析

9.1 声明基本数据类型变量

int a = 10;

9.2 创建对象

Scanner scanner = new Scanner(System.in);

9.3 创建数组对象

9.4 将数据写入数组

ageArray[1] = 5;

9.5 多声明一个数组变量

9.6 通过另一个变量访问数组元素

otherArray[2] = 14

9.7 数组变量指向新数组

otherArray = new int[2];

 

9.8 给新数组元素赋值

otherArray[1] = 33;

10.多维数组

10.1 多维数组概念

从逻辑角度出发

(1)一维数组

一维数组是线性的结构,通俗来说就是一条线

(2)二维数组

二维数组通俗来说就是一个面

(3)三维数组

三维数组就是一个立体的空间结构了

10.2 多维数组的底层内存存储结构

10.3 多维数组的语法层面

(1)创建二维数组格式一

// 格式1:动态初始化——创建数组对象时就指定了两个维度的数组长度
int[][] arr2d01 = new int[3][2];
arr2d01[0][0] = 100;
arr2d01[0][1] = 101;
arr2d01[1][0] = 102;
arr2d01[1][1] = 103;
arr2d01[2][0] = 104;
arr2d01[2][1] = 105;

(2)创建二维数组格式二

// 格式2:动态初始化——仅指定第一个维度的数组长度
int[][] arr2d02 = new int[3][];
// Java中多维数组不必都是规则矩阵形式
arr2d02[0] = new int[]{3, 5, 7};
arr2d02[1] = new int[]{14, 21, 66, 89};
arr2d02[2] = new int[]{90, 100};

注:C语言中的多维数组创建就不能用这种方式创建,例如C语言的二维数组就一定要指定列的大小,才会自动生产多少行。Java的二维数组可以不是规则矩阵形式。

(3)创建二维数组格式三

// 格式3:静态初始化——在创建对象时将数据填充
// 此时如果某个元素位置设置为null不会编译报错,但是访问这个位置时还是要先初始化
int[][] arr2d03 = new int[][]{{1,2,3}, {4,5}, null, {6,7,8}};
// 前面设置null的地方,需要初始化才可以访问
arr2d03[2] = new int[]{12,24};
arr2d03[2][0] = 5;

(4)创建二维数组格式四【不建议】

// 格式4:声明变量时,两层[]没在一起
int[] x[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};

10.4 访问二维数组

// 二、访问二维数组元素(读、写)
int[][] arr2d05 = new int[2][2];
// 向数组元素写入数据
arr2d05[1][0] = 10;
// 读取数组元素
System.out.println("arr2d05[1][0] = " + arr2d05[1][0]);

10.5 遍历二维数组

// 三、遍历二维数组:需要使用双层嵌套的循环
int[][] arr2d06 = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
// 先遍历第一个维度:取出每一个一维数组
for (int i = 0; i < arr2d06.length; i++) {
    int[] intArr = arr2d06[i];
    for (int j = 0; j < intArr.length; j++) {
        int intValue = intArr[j];
        System.out.println("intValue["+i+"]["+j+"] = " + intValue);
    }
}

11.数组练习

练习1

升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。屋内均是IT行业人士,喜欢安静。所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。第一个数组的数组元素{2,0,3,2,4,0,1,3,2,3,3}是第二个数组的下标,第二个数组是{8,2,1,0,3},第二数组根据第一数组的元素挨个取出元素,组合起来就是房东的电话,该题求房东的电话号码。

public class ArrayTest {
    public static void main(String[] args) {
        /*
        * 解题思路:建立两个数组,根据提示取出数组元素,
        * 用加号连起来就是电话号码的字符串
        * */
        String s = "";
        int[] array1 = new int[]{8,2,1,0,3};
        int[] ints = new int[]{2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3};
        for (int i = 0; i < ints.length; i++) {
           s += array1[ints[i]];
        }
        System.out.println("房东的电话号码为:"+s);
    }
}

练习2

分析以下需求,并用代码实现:

(1)在编程竞赛中,有10位评委为参赛的选手打分,分数分别为:5,4,6,8,9,0,1,2,7,3

(2)求选手的最后得分(去掉一个最高分和一个最低分后其余8位评委打分的平均值)

public class ArrayTest {
    public static void main(String[] args) {
        /*
        * 解题思路:要有两个循环,第一个循环求出最大值和最小值,
        * 第二个循环求出总和,然后除以8即可。
        * */
        int[] ints = {5, 4, 6, 8, 9, 0, 1, 2, 7, 3};
        int max = ints[0];
        int min = ints[0];
        int score = 0;
        int sum = 0;
        for (int i = 1; i < ints.length; i++) {
            score = ints[i];
            if(score>max){
                max = score;
            }else if (score < min){
                min = score;
            }
        }
        for (int i = 0; i < ints.length; i++) {
            sum += ints[i];
        }
        double average = (sum - min - max)/8.0;
        System.out.println("average = "+average);
    }
}

练习3

用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词

中文 英文
星期一 Monday
星期二 Tuesday
星期三 Wednesday
星期四 Thursday
星期五 Friday
星期六 Saturday
星期日 Sunday
public class ArrayTest {
    public static void main(String[] args) {
        String[] strings = {"星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"};
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(strings[num - 1]);
    }
}

练习4

用一个数组存储26个英文字母的小写形式,并遍历显示小写字母以及它对应的大写字母,例如:a->A

提示:ASCII码表

public class ArrayTest {
    public static void main(String[] args) {
        char[] chars = new char[26];
        for (int i = 0; i < 26; i++) {
            chars[i] = (char)('a' + i);
        }
        for (int i = 0; i < chars.length; i++) {
            System.out.println((char)(chars[i] - 32));
        }
    }
}

练习5

public class ArrayTest {
    public static void main(String[] args) {
        int[][] ints = new int[10][];
        for (int i = 0; i < 10; i++) {
            ints[i] = new int[i+1];
            ints[i][0] = 1;
            ints[i][i] = 1;
            for (int j = 1; j < i; j++) {
                ints[i][j] = ints[i-1][j-1]+ints[i-1][j];
            }
        }
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < i + 1; j++) {
                System.out.print(ints[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

12.数组工具类Arrays

用法举例:

// 1.创建一个数组对象
int[] toBeSortedArr = {22, 33, 5, 7, 2, -6, 13, 99, 82};
// 2.调用工具类的工具方法对上面数组进行排序
// 类名.方法名(传入参数)
Arrays.sort(toBeSortedArr);
// 3.遍历数组
for (int i = 0; i < toBeSortedArr.length; i++) {
    int value = toBeSortedArr[i];
    System.out.println("value = " + value);
}

13.数组使用中常见的异常

13.1 数组下标越界异常

// 1.数组下标越界异常
int[] intArr = new int[5];
// java.lang.ArrayIndexOutOfBoundsException
// intArr[80] = 5;
// java.lang.ArrayIndexOutOfBoundsException
// System.out.println("intArr[5] = " + intArr[5]);

13.2 空指针异常

// 2.空指针异常
// java.lang.NullPointerException
char[] charArr = null;
System.out.println("charArr[0] = " + charArr[0]);
相关文章
|
14天前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第17天】本文详细介绍了Java编程中Map的使用,涵盖Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的并发处理和性能优化技巧,适合初学者和进阶者学习。
31 3
|
11天前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
26 4
|
12天前
|
存储 安全 Java
从入门到精通:Java Map全攻略,一篇文章就够了!
【10月更文挑战第19天】本文介绍了Java编程中重要的数据结构——Map,通过问答形式讲解了Map的基本概念、创建、访问与修改、遍历方法、常用实现类(如HashMap、TreeMap、LinkedHashMap)及其特点,以及Map在多线程环境下的使用和性能优化技巧,适合初学者和进阶者学习。
36 4
|
11天前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
14 2
|
20天前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
27天前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
40 9
|
26天前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
18 3
|
1月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
22 6
|
26天前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
21 1
|
28天前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
13 1