• 第八章 数组


    一、本章目标

    • 掌握数组的基本用法

    • 掌握数组的几种典型应用

    二、内容

    1 数组概述

    1.1 为什么需要数组

    • 问题:Java考试结束后,老师给张浩分配了一项任务,让他计算全班(30人)的平均分

    • 解决方案    

            

    • 缺点

      • 变量太多

      • 不利于数据处理

    1.2 Java中的数组

    什么是数组

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

    数组与变量的区别

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

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

    数组的基本要素

    • 标识符:数组的名称,用于区分不同的数组

    • 数组元素:向数组中存放的数据

    • 元素下标:对数组元素进行编号,从0开始,数组中的每个元素都可以通过下标来访问

    • 元素类型:数组元素的数据类型  

    2 如何使用数组

    2.1 使用数组的步骤

    步骤一:声明数组

    1. 数据类型[] 数组名;

    2. 或者

    3. 数据类型 数组名[]

    步骤二:分配空间

    1. 数组名 = new 数组类型[数组长度]

    步骤一和步骤二可以合并

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

    步骤三 赋值

    1. 数组名[下标值]

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

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

    步骤四 使用

    1. public class StudenAvg {

    2. public static void main(String[] args) {

    3. int score[] = new int[30];

    4. //从外部获得学生成绩

    5. Scanner input = new Scanner(System.in);

    6. //初始化

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

    8. System.out.println("请输入第"+(i+1)+"学生的成绩:");

    9. score[i] = input.nextInt();

    10. }

    11. //求平均值

    12. double avg = 0;

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

    14. avg+=score[i];

    15. }

    16. avg=avg/30.0;

    17. System.out.println("平均值是:"+avg);

    18. }

    19. }

    注:

        数组长度:数组名.length

    2.2 常见错误

    错误一:数组下标从0开始

    错误二:没有指明数组大小

    1. public class ErrorDemo1 {

    2.     public static void main(String[ ] args){

    3.          int[ ] score = new int[ ];

    4.          score[0] = 89;

    5.          score[1] = 63;

    6.          System.out.println(score[0]);

    7.    }

    8. }

    错误三:数组越界

    1. public class ErrorDemo2 {

    2. public static void main(String[ ] args) {

    3. int[ ] scores = new int[2];

    4. scores[0] = 90;

    5. scores[1] = 85;

    6. scores[2] = 65;

    7. System.out.println(scores[2]);

    8. }

    9. }

    错误四:赋值出错

    1. public static void main(String[ ] args){

    2.       int[ ] score = new int[5];

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

    4.      

    5.       int[ ] score2;

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

    7. }

    2.3 编程训练

    有一个数列:8,4,2,1,23,344,12

    • 循环输出数列的值

    • 求数列中所有数值的和

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

    实现

    1. /**

    2. *

    3. * @author wangshaohua

    4. * 功能:有一个数列:8,4,2,1,23,344,12

    5. 循环输出数列的值

    6. 求数列中所有数值的和

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

    8. *

    9. */

    10. public class Show1 {

    11. public static void main(String[] args) {

    12. int[] arr = {8,4,2,1,23,344,12};

    13. //循环输出数列的值

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

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

    16. }

    17. //求数列中所有数值的和

    18. int sum = 0;

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

    20. sum+=i;

    21. }

    22. System.out.println(" 数列中所有数值的和:"+sum);

    23. //从键盘中任意输入一个数据,判断数列中是否包含此数

    24. Scanner input = new Scanner(System.in);

    25. System.out.println("请输入需要判断的数值:");

    26. int num = input.nextInt();

    27. int index = -1;//相等值的下标

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

    29. if(num==arr[i]){

    30. index = i;

    31. break;

    32. }else {

    33. continue;

    34. }

    35. }

    36. if(index==-1){

    37. System.out.println("你输入的值不在数列当中");

    38. }else {

    39. System.out.println("你输入的值在数列当中,序号是:"+index);

    40. }

    41. }

    42. }

    3 数组的应用

    3.1 求最大值

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

    实现

    1. ublic class MaxScore {

    2. /**

    3. * 求数组最大值

    4. */

    5. public static void main(String[] args) {

    6. int[] scores = new int[5];

    7. int max = 0; //记录最大值

    8. System.out.println("请输入5位学员的成绩:");

    9. Scanner input = new Scanner(System.in);

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

    11. scores[i] = input.nextInt();

    12. }

    13. //计算最大值

    14. max = scores[0];

    15. for(int i = 1; i < scores.length; i++){

    16. if(scores[i] > max){

    17. max = scores[i];

    18. }

    19. }

    20. System.out.println("考试成绩最高分为:" + max);

    21. }

    22. }

    3.2 数组的排序

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

    分析:

    • 使用java.util.Arrays类

      • java.util包提供了许多工具类

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

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

    实现

    1. public class ScoreSort {

    2. public static void main(String[] args) {

    3. int[] scores = new int[5]; //成绩数组

    4. Scanner input = new Scanner(System.in);

    5. System.out.println("请输入5位学员的成绩:");

    6. //循环录入学员成绩

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

    8. scores[i] = input.nextInt();

    9. }

    10. Arrays.sort(scores); //对数组进行升序排序

    11. System.out.print("学员成绩按升序排列:");

    12. //利用循环输出学员成绩

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

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

    15. }

    16. }

    17. }

    3.3 向数组插入元素


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


    分析:

    • 将成绩序列保存在长度为6的数组中

    • 通过比较找到插入位置

    • 将该位置后的元素后移一个位置

    • 将增加的学员成绩插入到该位置 

    实现

    1. public class Insert {

    2. public static void main(String[] args) {

    3. int[] list = new int[6]; // 长度为为6的数组

    4. list[0] = 99;

    5. list[1] = 85;

    6. list[2] = 82;

    7. list[3] = 63;

    8. list[4] = 60;

    9. int index = list.length; //保存新增成绩插入位置

    10. System.out.println("请输入新增成绩: ");

    11. Scanner input = new Scanner(System.in);

    12. int num = input.nextInt(); // 输入要插入的数据

    13. //找到新元素的插入位置

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

    15.            if(num > list[i]){

    16.                index = i;

    17.                break;

    18.            }

    19.        }

    20. //元素后移

    21.        for(int j = list.length-1; j > index; j--){

    22.            list[j] = list[j-1]; //index下标开始的元素后移一个位置

    23.        }

    24. list[index] = num;//插入数据

    25. System.out.println("插入成绩的下标是:"+index);

    26. System.out.println("插入后的成绩信息是: ");

    27. for (int k = 0; k < list.length; k++) { // 循环输出目前数组中的数据

    28. System.out.print(list[k] + " ");

    29. }

    30. }

    31. }

    4 总结

    • 数组有哪些特点?

    • 使用数组的四个步骤?

    • 如何实现数组的排序?

    • 如何求数组最大/最小值?

    • 如何向数组中插入一个元素?














  • 相关阅读:
    EF架构~简洁关联表插入,优越的代码性能!
    基础才是重中之重~你是否真正了解TransactionScope?
    基础才是重中之重~如何整理BLL与DAL层的文件
    java Byte 和byte 差别及byte[ ]和string转换
    转: java的InputStream和OutputStream的理解
    java.awt.list java.util.list 区别
    java.util.Scanner 总结
    java .io OutputStream 与InputStream
    java 3中方法复制一个文件
    网络爬虫 简介
  • 原文地址:https://www.cnblogs.com/imentors/p/5a04c666d56aa6c3a17b20153388d6a5.html
Copyright © 2020-2023  润新知