第八章 数组

一、本章目标

  • 掌握数组的基本用法

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

二、内容

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 总结

  • 数组有哪些特点?

  • 使用数组的四个步骤?

  • 如何实现数组的排序?

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

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














原文地址:https://www.cnblogs.com/imentors/p/5a04c666d56aa6c3a17b20153388d6a5.html