学习要点

  • 数组的基本用法
  • 数组的典型应用

数组相关概念

问题

Java考试结束后,老师给小强分配了一项任务,让他计算全班(30人)的平均分,按照目前的知识结构,如何实现?

问题分析

数组

定义:数组是一个变量,存储相同数据类型的一组数据。

声明一个变量就是在内存空间划出一块合适的空间。

声明一个数组就是在内存空间划出一串连续的空间。

数组基本要素

  • 标识符:数组的名称,用于区分不同的数组
  • 数组元素:向数组中存放的数据
  • 元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问
  • 元素类型:数组元素的数据类型

数组的使用

使用数组4步骤

第一步:声明数组

声明数组: 告诉计算机数据类型是什么

语法分析

第二步:分配空间

分配空间:告诉计算机分配几个连续的空间。

语法分析:声明数组并分配空间(第一步第二步合并书写)

第三步:赋值

向分配的内存单元放数据

逐个赋值比较繁琐,解决方法如下

方法一:边声明边赋值

方法二:动态从键盘输入信息赋值

第四步:处理数据

计算5位学生平均分

综合演示:输入5位同学成绩,计算平均分并输出。

常见错误:声明数组时未制定大小,数组越界问题,创建数组并赋值的方式必须在一条语句中完成。

例如:

int[ ] score = new int[5];

score = {60, 80, 90, 70, 85};

int[ ] score2;

score2 = {60, 80, 90, 70, 85};

上机练习:有一个数列:8,4,2,1,23,344,12。

要求:循环输出数列的值。

求数列中所有数值的和。

猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。

上机练习:定义5个数组,分别存储学生的学号、姓名、性别、年龄、班级。

要求:初始化三个学生信息,按照表格样式输出。

数组的排序

数据工具类和方法的使用

问题:循环录入5位学员成绩,进行升序排列后输出结果。

解决方案:使用java.util.Arrays类

  • java.util包提供了许多工具类
  • Arrays类提供操作数组的方法,例排序、查询
  • Arrays类的sort()方法: 对数组进行升序排列

求数组的最大值

问题:从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分。

问题分析:可以采用if选择结构处理,过程类似打擂台,但是比较繁琐。

解决方案:使用循环解决该问题

数组进阶:插入算法

问题:有一组学员的成绩{99,85,82,63, 60},将它们按升序排列。要增加一个学员的成绩,将它插入成绩序列,并保持升序。

解决方案要点:重新定义个长度为6的数组。

参考代码:

int[] arr1 = { 99, 85, 82, 63, 60 };// 定义数组1

        Arrays.sort(arr1);// 对数组1进行排序

        System.out.println("arr1排序后数组元素:");

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

            System.out.print(arr1[i] + "\t");

        }

        // 数组长度固定,arr1无法插入数据,定义一个长度为arr1长度加1的数组arr2

        int[] arr2 = new int[arr1.length + 1];

        // 把arr1的数据拷贝到arr2

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

            arr2[i] = arr1[i];

        }

        System.out.println("\narr2数组元素:");

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

            System.out.print(arr2[i] + "\t");

        }

        int inNum = 88;// 定义待插入数据:88

        int index = 0;// 待插入的位置

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

            if (arr2[i] > inNum) {//问题:如果inNum原本就比数组元素都大???

                index = i;

                break;

            }

        }

        // 把数组元素下标为index(包含index)之后的元素向后移动一位

        for (int i = arr2.length - 1; i > index; i--) {

            arr2[i] = arr2[i - 1];

        }

        // 插入数据

        arr2[index] = inNum;

        // 输出插入数据后的数组

        System.out.println("\narr2插入数据后的数组元素:");

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

            System.out.print(arr2[i] + "\t");

      }

  

数组进阶:冒泡排序算法

  • 采用二重循环
  • N个数字来排序
  • 两两相比小靠前
  • 外层循环N-1次(i次)
  • 内层循环N-1-i次

参考代码:

// 冒泡排序法

        int[] arr = { 11, 3, 2, 55, 44, 33 };

        System.out.println("冒泡排序前的数组:");

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

            System.out.print(arr[i] + " ");

        }

        // 排序

        for (int i = 0; i < arr.length - 1; i++) {// 外层循环N-1次

            for (int j = 0; j < arr.length - 1 - i; j++) {// 内层循环N-1-i次

                if (arr[j] > arr[j + 1]) {// 两个数字比较,大的排后

                    int temp;

                    temp = arr[j + 1];

                    arr[j + 1] = arr[j];

                    arr[j] = temp;

                }

            }

        }

        System.out.println("\n冒泡排序后的数组:");

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

            System.out.print(arr[i] + " ");

        }

  

上机练习:将 一组乱序的字符进行排序,进行升序和逆序输出。

提示步骤:

1.创建数组存储原字符序列。

2.利用Array类的sort( )方法对数组进行排序,并循环输出。

3. 从最后一个元素开始,将数组中的元素逆序输出。

上机练习:在上一个练习的基础上改进

向上一个练习中得到的升序字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序。

JavaSE-05 数组的更多相关文章

  1. 067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数

    067 01 Android 零基础入门 01 Java基础语法 08 Java方法 05 数组作为方法参数 本文知识点:数组作为方法参数 说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进 ...

  2. 05 - JavaSE之数组

    一维数组 java中的数组是引用类型,分配在堆空间上. 一维数组的声明方式: type var[]; type[] var; java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空 ...

  3. C语言 05 数组

    数组作为函数参数,可以省略元素个数. 数组作为函数参数,传递是整个数组的地址,修改函数形参数组的值,会影响到外面的 实参数组. 基本数据类型作为函数参数,传递是数值.

  4. Java 基础入门随笔(6) JavaSE版——数组操作

    1.数组 概念:同一种类型数据的集合.其实就是数组就是一个容器. 好处:可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式: ①. 元素类型[] 数组名 = new 元素类型[元素个数或数组 ...

  5. c#学习笔记05——数组&集合

    数组 声明数组 .一维数组的定义: 数据类型[] 数组名=new 数据类型[大小]; eg: ]; ,,,,}; ]; .多维数组的定义 ,];//定义二维数组 ,,];//定义三维数组 多维数组可以 ...

  6. JAVASE(八) 数组: 一维数组、二维数组、动态数组、静态数组

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.一维数组 1.1 数组的声明和初始化声明方式: String str[]; //不建议使用 Stri ...

  7. Java基础四(switch、数组、)

    1.流程控制语句switch2.数组3.随机点名器案例 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. ...

  8. 04_Java基础语法_第4天(数组)_讲义

    今日内容介绍 1.流程控制语句switch 2.数组 3.随机点名器案例 01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪 ...

  9. Java基础笔记01-02-03-04

    一.今日内容介绍 1.Java开发环境搭建 2.HelloWorld案例 3.注释.关键字.标识符 4.数据(数据类型.常量) 01java语言概述 * A: java语言概述 * a: Java是s ...

  10. php基础03:数据类型

    <?php // day01:数据类型 //01.字符串 $x = "hello world"; echo $x; echo "<br>"; ...

随机推荐

  1. 八.OC基础加强--1.autorelease的用法 2.ARC下内存管理 3.分类(category)4.block的学习

    1.autorelease的用法   1.自动释放池及autorelease介绍 (1)在iOS程序运行过程中,会创建无数个池子,这些池子都是以栈结构(先进后出)存在的. (2)当一个对象调用auto ...

  2. bzoj 2169 连边 —— DP+容斥

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2169 就和这篇博客说的一样:https://blog.csdn.net/WerKeyTom_ ...

  3. ubuntu搭建开发环境踩坑实录

    谨以此文,记录和ubuntu系统不死不休的搏斗过程,后续待补. 1.双系统安装,windows采用uefi模式安装(优启通可制作uefi的win10安装盘),ubuntu不要划分boot区,而应该划分 ...

  4. 微信公众号开发——获取access_token(PHP版)

    access_token是调用微信接口的唯一凭据,每两小时刷新一次,我们需要每两小时就获取一次access_token. <?php class TokenUtil { //获取access_t ...

  5. bzoj 2839: 集合计数【容斥原理+组合数学】

    首先,考虑容斥,我们所要的答案是并集至少有\( k \)个数的方案数减去并集至少有\( k+1 \)个数的方案数加上并集至少有\( k \)个数的方案数-- 在n个数中选i个的方案数是\( C_{n} ...

  6. 最小割树Gomory–Hu tree

    fanhq666地址:http://fanhq666.blog.163.com/blog/static/8194342620113495335724/ wiki地址(证明):https://en.wi ...

  7. 洛谷 P4009 汽车加油行驶问题 【最小费用最大流】

    分层图,建k层,设(i,j,0)为点(i,j)的满油状态,全图的流量都是1,因为重复走到一个点没有意义.如果当前点是加油站,那么它向它上左的点连费用为a的边,向下右连费用为a+b的边: 否则,这个点的 ...

  8. [App Store Connect帮助]七、在 App Store 上发行(2.4)设定价格与销售范围:安排价格调整

    如果您拥有<付费应用程序协议>,则可以为您的 App 安排随时间推移的价格调整.您可以安排具有明确开始日期和结束日期的定价调整,以及没有结束日期的永久性定价调整.例如,您可以设置一个为期 ...

  9. Ocelot(十)- 路由

    Ocelot的主要功能是接收传入的http请求并将其转发到下游服务.Ocelot目前仅以另一个http请求的形式支持此功能(将来可能是任何传输机制). Ocelot描述了将一个请求路由到另一个请求作为 ...

  10. Phoenix数据覆盖的一种解决方案

    最近在做实时数仓,需要兼顾离线和实时两种查询方式,大致的方案是数据通过binlog抽取,经Phoenix插入,hive映射hbase表:Phoenix创建索引,实时查询Phoenix:离线查询hive ...