zoukankan      html  css  js  c++  java
  • JavaSE-05 数组

    学习要点

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

      

    数组相关概念

    问题

    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] + "	");
    
            }
    
     
    
            // 数组长度固定,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("
    arr2数组元素:");
    
            for (int i = 0; i < arr2.length; i++) {
    
                System.out.print(arr2[i] + "	");
    
            }
    
     
    
            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("
    arr2插入数据后的数组元素:");
    
            for (int i = 0; i < arr2.length; i++) {
    
                System.out.print(arr2[i] + "	");
    
          }
    

      

    数组进阶:冒泡排序算法

    • 采用二重循环
    • 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("
    冒泡排序后的数组:");
    
            for (int i = 0; i < arr.length; i++) {
    
                System.out.print(arr[i] + " ");
    
            }
    

      

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

    提示步骤:

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

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

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

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

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



    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    Oracle DBLink 使用情况
    asp.net里AjaxPro简单入门教程
    AjaxPro异步调用的超时设置
    ORA-01552: 非系统表空间 'USERS' 不能使用系统回退段的处理
    andoid 监听返回键退出
    WinForm调用user32.dll实现全屏
    C# Panel 打开 Form 窗口的方法
    Android获取日期及星期的方法
    WinForm 自定义对话框 获取返回值
    52. (待补) 实现对 无头单链表 的基本操作
  • 原文地址:https://www.cnblogs.com/rask/p/8251783.html
Copyright © 2011-2022 走看看