首页 > 编程语言 >java —— 数组(超详细教程)

java —— 数组(超详细教程)

时间:2025-01-20 15:59:14浏览次数:3  
标签:教程 java int arr System 数组 println out

介绍:这期讲的是java的原生数组,也就是list(静态空间),空间是写死的;后期的ArrayList是动态数组。我们需要先认识基础的格式,方便后面的ArrayList学习。

一、创建数组

(一)方法一:

1、先声明,再定义长度。

    public static void main(String[] args) {
        // 声明变量
        int[] arr;
        // 创建数组对象
        arr = new int[3];

        System.out.println("arr[0]="+arr[0]);
        System.out.println("arr[1]="+arr[1]);
        System.out.println("arr[2]="+arr[2]);
        System.out.println("数组的长度是:"+ arr.length);
    }

(二)方法二:

1、先声明,再定义长度。

2、写入data(数据)。

public class Ex26_02 {
    public static void main(String[] args) {

        int[] arr = new int[4];
        arr[0] = 1;
        arr[1] = 2;

        System.out.println("arr[0]=" + arr[0]);
        System.out.println("arr[1]=" + arr[1]);
        System.out.println("arr[2]=" + arr[2]);
        System.out.println("arr[3]=" + arr[3]);
        System.out.println("数组的长度是:" + arr.length);
    }
}

(三)方法三:

1、创建的同时,也写入

public class Ex27_02 {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4};
        System.out.println("arr[0]"+arr[0]);
        System.out.println("arr[1]"+arr[1]);
        System.out.println("arr[2]"+arr[2]);
        System.out.println("arr[3]"+arr[3]);
    }
}

二、数组遍历

(优化)for (int j : arr) = (传统)for (int i = 0; i < arr.length; i++) 

下面会对这两种方法进行解释

public class Ex30_02 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        for (int j : arr) {
            System.out.println(j);
        }
    }
}

(一)代码解释:

  1. 数组声明和初始化

    • int[] arr = {1, 2, 3, 4, 5};
      • 声明并初始化了一个 int 类型的数组 arr
      • 这里使用了数组初始化的简洁方式,将数组元素 1234 和 5 放在花括号 {} 中。
  2. 增强型 for 循环(for-each 循环)

    • for (int j : arr) {...}
      • 这是 Java 中的增强型 for 循环,也叫 for-each 循环,用于遍历数组或集合中的元素。
      • int j:声明一个新的变量 j,它的类型要与数组元素的类型一致,这里是 int
      • arr:表示要遍历的数组。
  3. 循环体

    • System.out.println(j);
      • 对于数组 arr 中的每一个元素,将其存储在变量 j 中,并执行循环体中的操作。
      • 这里的操作是将元素 j 的值输出到控制台。

(二)代码执行过程:

  • 当代码开始执行时,会执行以下步骤:
    1. 首先创建一个 int 类型的数组 arr,并存储元素 1234 和 5
    2. 进入 for-each 循环,将数组 arr 的第一个元素 1 赋值给 j,并执行 System.out.println(j);,输出 1
    3. 接着将数组 arr 的第二个元素 2 赋值给 j,并输出 2
    4. 重复这个过程,依次输出 34 和 5

(三)优点:

  • 这种增强型 for 循环具有以下优点:
    • 简洁性:相比于传统的 for 循环,不需要使用索引变量和 arr.length 来控制循环,代码更简洁。
    • 易读性:代码的意图更加清晰,更容易理解,特别是对于只需要遍历元素而不需要操作数组索引的情况。

(四)对比传统的 for 循环:

  • 传统的 for 循环实现相同功能的代码如下:
int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);
}

(五)传统 for 循环解释:

  • for (int i = 0; i < arr.length; i++) {...}
    • 使用 int i = 0 初始化一个索引变量 i
    • i < arr.length 作为循环条件,确保不超出数组长度。
    • i++ 用于更新索引变量。
    • arr[i] 用于访问数组中索引为 i 的元素。

三、数组最值

public class Ex31_02 {
    public static void main(String[] args) {
        // 创建数组
        int[] arr = {4,1,6,5,9,8};
        // 最大值赋值,调用函数
        int max = getMax(arr);
        // 打印最大值
        System.out.println("max="+max);
    }
    static int getMax(int[] arr){
        // 定义数组的第一个为最大值
        int max = arr[0];
        // 因为第一个已经使用了,我们不需要让 x=0;减少循环多一次
        for (int x=1;x<arr.length;x++){
            if(arr[x]>max){
                max=arr[x];
            }
        }
        return max;
    }

}

 四、数组排序

public class Ex32_02 {
    public static void main(String[] args) {
        int[] arr = {9, 8, 3, 5, 2};
        System.out.print("冒泡排序前:");
        printArray(arr);
        bubbleSort(arr);
        System.out.print("冒泡排序后:");
        printArray(arr);
    }

    // 定义数组的打印方法
    public static void printArray(int[] arr) {
        // 循环遍历数组
        for (int j : arr) {
            System.out.print(j + " ");
        }
        System.out.print("\n");
    }

    // 定义对数组的排序方法
    public static void bubbleSort(int[] arr) {
        // 定义外层循环
        for (int i = 0; i < arr.length - 1; i++) {              // 0下标开始,取到最后一个
            // 定义内层循环,-i-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.print("第"+(i+1)+"轮排序后:");
            printArray(arr);
        }
    }
}

(一)冒泡排序的实现细节:

  • 外层循环(循环多少次)

    • for (int i = 0; i < arr.length - 1; i++) {...}
      • 控制排序的轮数,arr.length - 1 表示最多需要 arr.length - 1 轮排序,因为每一轮排序会将当前未排序部分的最大元素 “浮” 到末尾。
  • 内层循环(交换多少次)

    • for (int j = 0; j < arr.length - i - 1; j++) {...}
      • 比较相邻元素并交换。
      • arr.length - i - 1 表示每一轮排序后,末尾的 i 个元素已经是有序的,无需再比较。
  • 元素交换

    • if (arr[j] > arr[j + 1]) {...}
      • 比较相邻元素 arr[j] 和 arr[j + 1],如果 arr[j] 大于 arr[j + 1],则交换它们的位置。
      • int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp;:使用临时变量 temp 交换元素位置。

五、多维数组

public class Ex33_02 {
    public static void main(String[] args) {
        // 创建多维数组
        int[][] arr = new int[3][];
        arr[0] = new int[]{11, 12};
        arr[1] = new int[]{21, 22, 23};
        arr[2] = new int[]{31, 32, 33, 34};

        //  总销售额
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            // 组销售额
            int groupSum = 0;
            for (int j = 0; j < arr[i].length; j++) {
                groupSum += arr[i][j];
            }
            sum += groupSum;
            System.out.println("第" + (i + 1) + "小组销售额为:" + groupSum + "万元。");

        }
        System.out.println("总销售额为:" + sum + "万元");
    }
}

(一)代码解释:

  1. 类和主方法

    • public class Ex33_02:定义了一个公共类 Ex33_02
    • public static void main(String[] args):程序的入口点,程序从这里开始执行。
  2. 多维数组的创建和初始化

    • int[][] arr = new int[3][];

      • 创建了一个二维数组 arr,其中第一维的长度为 3,表示有 3 个小组。
      • 这里只指定了第一维的长度,第二维的长度未指定,所以 arr 是一个锯齿状的数组,即每个子数组的长度可以不同。
    • arr[0] = new int[]{11, 12};

      • 为第一组创建一个包含两个元素的子数组,元素为 11 和 12
    • arr[1] = new int[]{21, 22, 23};

      • 为第二组创建一个包含三个元素的子数组,元素为 2122 和 23
    • arr[2] = new int[]{31, 32, 33, 34};

      • 为第三组创建一个包含四个元素的子数组,元素为 313233 和 34
  3. 销售额计算和输出

    • int sum = 0;

      • 初始化一个变量 sum,用于存储总销售额。
    • 外层 for 循环:

      • for (int i = 0; i < arr.length; i++) {...}
        • 遍历每一个小组,arr.length 是第一维的长度,这里为 3。
    • 内层 for 循环:

      • for (int j = 0; j < arr[i].length; j++) {...}
        • 遍历每个小组的元素。
        • arr[i].length 是第 i 个子数组的长度。
    • groupSum += arr[i][j];

      • 计算每个小组的销售额 groupSum,将子数组中的元素相加。
    • sum += groupSum;

      • 将每个小组的销售额累加到总销售额 sum 中。
    • System.out.println("第" + (i + 1) + "小组销售额为:" + groupSum + "万元。");

      • 输出每个小组的销售额。
    • System.out.println("总销售额为:" + sum + "万元");

      • 输出总销售额。

标签:教程,java,int,arr,System,数组,println,out
From: https://blog.csdn.net/CNY8888/article/details/145258164

相关文章

  • C#实现JAVA的Synchronized
    在JAVA中,用synchronized关键字用于确保多个线程不会同时执行某个方法或代码块,从而防止并发问题,C#中有多中方法来处理这种情况。Lock语句lock语句是最常用的同步机制,类似于JAVA的synchronized。他使用一个对象作为锁,确保同一个时间只有一个线程可以进入被锁定的代码块。示......
  • 互联网Java架构师
    目录内容目录下载入口内容目录├─01、性能调优专题-JVM》│    01、性能调优专题-JVM》01、1-01、JVM类加载运行全过程梳理.mp4│    01、性能调优专题-JVM》02、1-02、java.exe运行一个类时JVMHotspot底层做了些什么.mp4│    01、性能调优专......
  • C语言逆序操作数组和引用传递参数
    ////main.c//Test_C////Createdbystevexiaohuzhaoon2025/1/20.//#include<stdio.h>//C语言指针传递参数(引用传递)voidswap(int*px,int*py){intt=*px;*px=*py;*py=t;}voidtest(intn){intx=1;for(inti......
  • 基于java+springboot的网络选课管理系统
    一、系统概述“基于Java+SpringBoot的网络选课管理系统”是一个利用Java编程语言和SpringBoot框架开发的综合性平台,旨在为学校提供一个方便、高效、灵活的课程选择管理解决方案。二、功能特点用户管理:系统可区分不同角色,如学生、教师和管理员。学生可注册登录......
  • leetcode349-两个数组的交集
    leetcode349实现利用哈希set进行去重,然后循环nums2,如果nums2中的元素是在去重后的num1中出现过的,就存放在set2中,因为最后要返回的是不重复的数组,所以先放在set2,让其进行去重,最后把set2转为数组方法1varintersection=function(nums1,nums2){constset1=[........
  • PTA 之 数组元素循环右移问题
    一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由(A0​A1​⋯AN−1​)变换为(AN−M​⋯AN−1​A0​A1​⋯AN−M−1​)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式:......
  • 写一个方法,传入数字x,从一个一维数组里找到两个数字符合“n1 + n2 = x”
    在前端开发中,你可以使用JavaScript来编写这个方法。下面是一个简单的实现,它接受一个数字x和一个一维数组arr作为参数,并尝试在数组中找到两个数字,使它们的和等于x。如果找到了这样的两个数字,它会返回一个包含这两个数字的数组;如果没有找到,它会返回null。functionfindTwoNumbersTh......
  • 2025java面试常见八股文整理
    1.多线程编程下,怎么解决线程的数据安全问题?如果线程存在竞争临界资源,多线程访问下添加同步代码块synchronized解决,或者分布式排他锁进行临界资源控制。在分布式多线程环境下,线程的数据安全尽量不要产生连接资源,使用线程本地化ThreadLocal实现线程资源隔离。2.SpringIOC依......
  • 【转】[JavaScript] 解构赋值
    转自:kimi.ai解构赋值(DestructuringAssignment)是JavaScript中一种非常强大的语法特性,用于从数组或对象中快速提取数据并赋值给变量。它可以让代码更简洁、更易读。1.数组解构赋值数组解构赋值允许你从数组中按顺序提取值,并将它们赋值给变量。1.1基本用法JavaScript复制......
  • Java从零到1的开始-Day13
    一、String1.String介绍1.概述:String类代表字符串2.特点: a.Java程序中的所有字符串字面值(如"abc")都作为此类的实例(对象)实现  凡是带双引号的都是String的对象  Strings="abc"   String是数据类型,是一个字符串类型   s:对象名  ......