11、JAVA入门——一维数组

简介: 11、JAVA入门——一维数组

1.gif

1、 理解数组


(1)在Java中,数组是用来存储一组相同类型数据的数据结构。


(2)当数组初始化完毕后,Java为数组在内存中分配一段连续的空间,其在内存中开辟的空间也将随之固定,此时数组的长度就不能再发生改变。


(3)即使数组中没有保存任何数据,数组所占据的空间依然存在。


2、 定义数组


在Java中,定义数组的语法有如下两种:


       数据类型[] 数组名 = new 数据类型[数组长度];


或者:


       数据类型 数组名[] = new 数据类型[数组长度];


       --->定义数组时一定要指定数组名和数组类型


       --->必须书写“[]”,表示定义了一个数组,而不是一个普通的变量。


       --->“[数组长度]”决定连续分配的空间的个数,通过数组的length属性可获取此长度。


       --->数组的数据类型用于确定分配的每个空间的大小。


       --->数组元素分配的初始值如下


数据元素类型                                                    默认值


byte、short、int、long                                      0


float、double                                                     0.0


char                                                                    ‘\u0000’(空格)


boolean                                                              false


引用数据类型                                                     null


3、 数组元素的表示与赋值  


(1)数组元素在数组里顺序排列编号,该编号即元素下标,它标明了元素在数组中的位置。


(2)首元素(第一个元素)的编号规定为0,因此,数组的下标依次为0、1、2、3、4······依次递增,每次增长数是1.


(3)数组中的每个元素都可以通过下标来访问。


      获取数组元素的语法格式如下:


      数组名[下标值]


4、 数组的初始化


       所谓数组的初始化,就是在定义数组的同时一并完成赋值操作。


       数组初始化的语法格式如下:


               数据类型[] 数组名 = {值1,值2,值3,····,值n};


       或者:


               数据类型[] 数组名 = new 数据类型[]{值1,值2,值3,····,值n};


       注意:第二种初始化数组的方式里new 数据类型[]的[]括号里不能写数组长度。



5、 遍历数组


(1)使用for循环遍历数组


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

(2)使用增强for循环遍历数组


for(元素类型 变量名:数组名){
    System.out.println(变量名);
  }

---->增强for循环是JDK1.5之后提供的,用来实现对数组和集合中数据的访问,增强for循环的语法格式如下:


for(元素类型 变量名 : 要循环的数组或集合名){
    ······
  }

-->第一个元素类型是数组或集合中元素的类型。


-->变量名在循环时用来保存每个元素的值。


-->冒号后面是要循环的数组或集合名称。



6、 数组应用


(1)求数组中的最大值/最小值

思路:


       1)先假设数组中的第1个元素(下标为0)为最大值

       2)依次将数组中后面的元素与这个最大值进行比较,如果比这个最大值还要大,取代它称为新的最大值

       3)比较到最后一个元素,就可以获取这个数组中的最大值


 

int[] nums = { 56, 60, 78, 42, 311, 88, 12 };
  // 1)先假设数组中的第1个元素(下标为0)为最大值
  int max = nums[0];
  // 2)依次将数组中后面的元素与这个最大值进行比较,如果比这个最大值还要大,取代它称为新的最大值
  for (int i = 0; i < nums.length; i++) {
    if (nums[i] > max) {
    max = nums[i];
    }
  }
  System.out.println("数组中的最大值:" + max);
  // 获取最小值思路与获取最大值思路一样
  // 假设数组中第一个元素为最小值
  int min = nums[0];
  // 依次将数组中的元素取出来与这个最小值进行比较,如果元素值比这个最小值还小,就成为新的最小值,比较到最后一个元素,就可以得到数组中的最小值
  for (int i = 0; i < nums.length; i++) {
    if (nums[i] < min) {
    min = nums[i];
    }
  }
  System.out.println("数组中的最小值:" + min);

(2)向数组中添加元素

思路:


       1)声明一个长度比原来数组长度大1的数组

       2)将原来数组里元素按照顺序存入到新的数组中

       3)使用Scanner类获取你要增加的学员成绩

       4)通过循环比较获取增加的学员成绩的插入位置

       5)从插入元素插入位置开始及之后的元素依次往后移动一位(从最后一个元素开始,倒着移动)

       6)将要插入的成绩存储到插入位置


public static void main(String[] args) {
  //创建Scanner类对象
  Scanner sc=new Scanner(System.in);
  int[] scores={99,85,83,63,60};
  //1)声明一个长度比原来数组长度大1的数组
  int[] newScores=new int[scores.length+1];
  //2)将原来数组里元素按照顺序存入到新的数组中
  for (int i = 0; i < scores.length; i++) {
    newScores[i]=scores[i];
  }
  System.out.println("插入学生成绩前的数组:");
  for (int i : newScores) {
    System.out.print(i+" ");
  }
  System.out.println();
  //3)使用Scanner类获取你要增加的学员成绩
  System.out.println("请输入你要增加的学员成绩:");
  int insert =sc.nextInt();
  //设置插入的成绩插入的位置,默认将其插入在数组最后位置
  int index=newScores.length-1;
  //4)通过循环比较获取增加的学员成绩的插入位置
  for (int i = 0; i < newScores.length; i++) {
    if (insert>newScores[i]) {
    index=i;
    break;
    }
  }
  //5)从插入元素插入位置开始及之后的元素依次往后移动一位(从最后一个元素开始,倒着移动)
  for (int i = newScores.length-1; i < index; i--) {
    newScores[i]=newScores[i-1];
  }
  //6)将要插入的成绩存储到插入位置
  newScores[index]=insert;
  //输出新数组所有元素
  System.out.println("插入学生成绩后的数组:");
  for (int i : newScores) {
    System.out.print(i+" ");
  }
  }


(3)修改数组中的元素

思路:


       1)找到要修改的元素。


       2)修改元素。


(4)删除数组中的元素

思路:


       1)找到要删除的元素。


       2)删除元素。


       3)将删除元素后面的元素依次前移,最后位置的元素修改为默认值。


 

public static void main(String[] args) {
  String[] strs = { "hello", "java", "html", "css", "JavaScript" };
  System.out.println("---元素删除前---");
  for (int i = 0; i < strs.length; i++) {
    System.out.print(strs[i] + " ");
  }
  System.out.println();
  /*
   * 删除数组strs中的某个元素,删除完这个元素之后,后面的元素依次往前移动一位
   */
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入你想删除的元素的下标(0-4):");
  int index = sc.nextInt();
  if (index == 4) {
    strs[4] = null;
  } else {
    for (int i = index; i < strs.length - 1; i++) {
    strs[i] = strs[i + 1];
    }
    // 元素往前移动之后,最后一个元素赋值为null
    strs[strs.length - 1] = null;
  }
  System.out.println("---元素删除后---");
  for (int i = 0; i < strs.length; i++) {
    System.out.print(strs[i] + " ");
  }
  System.out.println();
  }

(5)数组冒泡排序

思路:


       1)将数组中元素两两比较,大的数(小的数)往后排(往前排)。


       2)每一轮将大数(小数)排在最后面(最前面)位置。


       3)多轮比较后,得出升序(降序)排列的数组。


       代码(升序排序):以int类型的数组arr为例


for(int i = 0;i
    for(int j = 0;j
      if(arr[j]>arr[j+1]){
             int temp = arr[j];
             arr[j] = arr[j+1];
      arr[j+1] = temp;
      }
    }
    }

(6)Arrays类的使用

       使用java.util.Arrays类


               java.util包提供的工具类


               Arrays类提供操作数组的方法,如:排序、查询


               Arrays类的sort()方法: 对数组进行升序排列



2.png

 

public static void main(String[] args) {
  int[] nums1 = { 11, 22, 33, 44, 55 };
  int[] nums2 = { 11, 22, 33, 44, 55 };
  // Arrays.equals(数组名1,数组名2):比较两个数组是否相同,返回一个布尔值,如果两个数组相同,返回true,否则返回false
  boolean result1 = Arrays.equals(nums1, nums2);
  System.out.println("nums1数组和nums2数组相同:" + result1);
  // Arrays.toString(数组名):将数组转换成字符串
  String result2 = Arrays.toString(nums1);
  System.out.println(result2);// [11, 22, 33, 44, 55]
  // Arrays.fill(数组名,数据):将数组中的所有元素值替换为你指定的值
  Arrays.fill(nums2, 99);
  System.out.println(Arrays.toString(nums2));// [99, 99, 99, 99, 99]
  // Arrays.copyOf(数组名,复制长度):将某个数组进行指定长度的复制
  int[] newNums1 = Arrays.copyOf(nums1, 3);
  System.out.println(Arrays.toString(newNums1));// [11, 22, 33]
  int[] newNums2 = Arrays.copyOf(nums1, 5);
  System.out.println(Arrays.toString(newNums2));// [11, 22, 33, 44, 55]
  int[] newNums3 = Arrays.copyOf(nums1, 8);
  System.out.println(Arrays.toString(newNums3));// [11, 22, 33, 44, 55, 0,
              // 0, 0]
  System.out.println("----------------------");
  // Arrays.binarySearch(查找的数组名称,你想要查找的值):在指定的数组中查找你要找的数据,返回这个数据的下标,如果找不到这个值,返回一个负值。使用这个方法之前,要确保数组进行了排序,否则不能保证查询结果的正确性
  int[] number = { 11, 55, 69, 34, 78, 16, 84 };
  Arrays.sort(number);
  System.out.println(Arrays.toString(number));// [11, 16, 34, 55, 69, 78,
              // 84]
  int index = Arrays.binarySearch(number, 78);
  System.out.println("你要查找的数据下标:" + index);
  }


7、 常见问题


       1、数组下标越界异常:ArrayIndexOutOfBoundsException


       数组下标从0开始,而不是从1开始。


       如果访问数组元素时指定的下标小于0或者大于等于数组的长度,都将出现下标越界异常。


相关文章
|
1天前
|
开发框架 IDE Java
java制作游戏,如何使用libgdx,入门级别教学
本文是一篇入门级教程,介绍了如何使用libgdx游戏开发框架创建一个简单的游戏项目,包括访问libgdx官网、设置项目、下载项目生成工具,并在IDE中运行生成的项目。
7 1
java制作游戏,如何使用libgdx,入门级别教学
|
1天前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
15 6
|
8天前
|
存储 安全 Java
Java数组(Arrays)详解
Java 中的数组是一种用于存储固定数量同类型数据的高效数据结构,支持连续内存存储和随机访问。数组可以声明并初始化,通过索引访问和修改元素,获取长度,使用循环遍历,支持多维形式,并可通过 `Arrays` 类的方法进行复制和排序。数组具有固定大小和类型安全的特点,但需注意越界等问题。灵活运用数组能显著提升编程效率。
|
17天前
|
Java 程序员 UED
Java中的异常处理:从入门到精通
【9月更文挑战第23天】在Java编程的世界中,异常是程序执行过程中不可避免的事件,它们可能会中断正常的流程并导致程序崩溃。本文将通过浅显易懂的方式,引导你理解Java异常处理的基本概念和高级技巧,帮助你编写更健壮、更可靠的代码。我们将一起探索如何捕获和处理异常,以及如何使用自定义异常来增强程序的逻辑和用户体验。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供有价值的见解和实用的技巧。
32 4
|
22天前
|
存储 Java 数据处理
Java 数组的高级用法
在 Java 中,数组不仅可以存储同类型的数据,还支持多种高级用法,如多维数组(常用于矩阵)、动态创建数组、克隆数组、使用 `java.util.Arrays` 进行排序和搜索、与集合相互转换、增强 for 循环遍历、匿名数组传递以及利用 `Arrays.equals()` 比较数组内容。这些技巧能提升代码的灵活性和可读性,适用于更复杂的数据处理场景。
|
23天前
|
存储 Java
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
java的Excel导出,数组与业务字典匹配并去掉最后一个逗号
37 2
|
21小时前
|
存储 机器学习/深度学习 Java
【Java】数组详解
【Java】数组详解
8 0
|
14天前
|
存储 Java
java数据结构,线性表顺序存储(数组)的实现
文章介绍了Java中线性表顺序存储(数组)的实现。线性表是数据结构的一种,它使用数组来实现。文章详细描述了线性表的基本操作,如增加、查找、删除、修改元素,以及其他操作如遍历、清空、求长度等。同时,提供了完整的Java代码实现,包括MyList接口和MyLinearList实现类。通过main函数的测试代码,展示了如何使用这些方法操作线性表。
|
2月前
|
算法 Java 开发者
Java 编程入门:从零到一的旅程
本文将带领读者开启Java编程之旅,从最基础的语法入手,逐步深入到面向对象的核心概念。通过实例代码演示,我们将一起探索如何定义类和对象、实现继承与多态,并解决常见的编程挑战。无论你是编程新手还是希望巩固基础的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
2月前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。