java数组-2

简介: 现在使用数组解决 8.1 节提出的计算 30 位学员平均分的问题。为了简单起见,先计算五位学员的平均分,如示例 1 所示。

4. 对数据进行处理

现在使用数组解决 8.1 节提出的计算 30 位学员平均分的问题。为了简单起见,先计算五位学员的平均分,如示例 1 所示。


示例1


package cn.jbit.array;
import java.util.Scanner;
public class ArrayDemo {
    public static void main(String[] args) {
        int[] scores = new int[5]; //成绩数组
        int sum = 0;            //成绩总和
        Scanner input = new Scanner(System.in);
        System.out.println("请输入5位学员的成绩:");
        for (int i = 0; i < scores.length; i++) {
            scores[i] = input.nextInt();
            sum = sum + scores[i];  //成绩累加
        }
        //计算并输出平均分
        System.out.println("学员的平均分是:" + (double)sum/scores.length);
    }
}


示例 1 的运行结果如图 8.3 所示。


图 8.3 示例 1 的运行结果


在循环中,循环变量 i 从 0 开始递增直到数组的最大长度 scores.length。因此,每次循环 i 加 1 ,实现数组的每个元素和的累加。


注意:数组一经创建,其长度(数组中包含元素的数目)是不可改变的,如果越界访问(即数组下标超过 0 至数组长度 -1 的范围),程序会报错。因此,当我们需要使用数组长度时,一般用如下的方式。


数组名.length;


例如,示例 1 的代码中,循环变量 i 小于数组长度,我们写成


i < scores.length;


而不是写成


i < 5;


如果定义的数组是基本数据类型的数组,即 int、double、char 和 boolean 类型,在 Java中定义数组之后,若没有指定初始值,则依数据类型的不同,会给数组元素赋一个默认值,如表 8-1 所示。


表 8-1 数组元素初始值



image.png


8.2.2 常见错误

数组是编程中常用的存储数据的结构,但在使用的过程中会出现一些错误,在这里进行归纳,希望能够引起大家的重视。


1.数组下标从0开始

常见错误1


package cn.jbit.array;
public class ErrorDemo1 {
    public static void main(String[] args) {
        int[] scores = new int[]{90, 85, 65, 89, 87};
        System.out.println("第3位同学的成绩应修改为92");
        scores[3] = 92;
        System.out.println("修改后,5位同学的成绩是:");
        for (int i = 0; i < scores.length; i++) {      //通过 for 循环输出数组元素,即遍历数组
            System.out.print(scores[i] + " ");
        }
    }
}


程序运行结果如图 8.4 所示。


图 8.4 常见错误 1 的运行结果


由运行结果可以看到,第三位同学的成绩仍然是 65, 而第四位同学的成绩变成了92。分析原因,是第三位同学的成绩在数组中的下标是 2, 而不是 3 。


排错方法:将赋值语句改为 scores[2] = 92 。


这样再运行程序,就可以将第三位同学的成绩修改为 92 分。


2.数组访问越界

常见错误2


package cn.jbit.array;
public class ErrorDemo2 {
    public static void main(String[] args){
        int[] scores = new int[2];
        scores[0] = 90;
        scores[1] = 85;
        scores[2] = 65;
        System.out.println(scores[2]);
    }
}


运行程序,发现编译器报错,如图 8.5 所示。


图 8.5 常见错误 2 的运行结果


如图 8.5 中所示,控制台打印出了  "java.lang.ArraylndexOutOfBoundsException", 意思是数组下标超过范围,即数组越界,这是异常类型(关于异常将在后续课程中学习,这里可以简单理解为程序能捕获的错误)。 "ErrorDemo2.java:9" 指出了出错位置,这里是程序的第 9 行,即 scores[2] = 65;。


因为数组下标范围是 0〜数组长度-1, 所以上面的数组下标范围是 0〜1, 而程序中的下标出现了 2, 超出了该范围,造成数组访问越界,所以编译器报错。


排错方法:增加数组长度或删除超出数组下标范围的语句。


注意:数组下标从 0 开始,而不是从 1 开始。如果访问数组元素时指定的下标小于 0 ,或者大于等于数组的长度,都将出现数组下标越界异常。


8.2.3 技能训练

上机练习 1


指导——显示商品名称


训练要点


定义数组

初始化数组

需求说明


定义特价商品数组,存储五件商品名称,在控制台显示特价商品名称。

程序运行结果如图 8.6 所示。


图 8.6 上机练习 1 的运行结果


实现思路及关键代码


(1) 创建一个长度为 5 的 String 类型数组,存储商品名称。


(2) 使用循环输出商品名称。


参考解决方案


package cn.jbit.array;
public class GoodsOutput {
   /**
    * 输出商品名称
    */
   public static void main(String[] args) {
      String[] goods = new String[]{"Nike背包","Adidas运动衫","李宁运动鞋","Kappa外套","361°腰包"};
      System.out.println("本次活动特价商品有:");
      for(int i = 0; i < goods.length; i++){
         System.out.println(goods[i]);
      }
   }
}


上机练习2


练习——购物金额结算


需求说明


某会员本月购物五次,输入五笔购物金额,以表格的形式输出这五笔购物金额及总金额。

程序运行结果如图 8.7 所示。

提示


参考实现步骤如下。


(1)  创建一个长度为 5 的 double 类型数组,存储购物金额。


(2)  循环输入五笔购物金额,并累加总金额。


(3)  利用循环输出五笔购物金额,最后输出总金额。


图 8.7 上机练习 2 的运行结果


参考代码示范


package cn.jbit.array;
import java.util.Scanner;
public class ShoppingList {
    /**
     * 购物金额结算
     */
    public static void main(String[] args) {
        double[] cashes = new double[5];
        double sum = 0.0;  //总金额
        System.out.println("请输入会员本月的消费记录");
        Scanner input = new Scanner(System.in);
        //循环输入金额
        for(int i = 0; i < cashes.length; i++){
            System.out.print("请输入第" +(i+1)+ "笔购物金额:");
            cashes[i] = input.nextDouble();
            sum = sum + cashes[i]; //累加总金额
        }
        //循环输出每笔金额
        System.out.println("\n序号\t\t金额(元)");
        for(int i = 0; i < cashes.length; i++){
            System.out.println((i+1) + "\t\t" + cashes[i]);
        }
        System.out.println("总金额\t\t" + sum);
    }
}
相关文章
|
1月前
|
存储 缓存 算法
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
31 4
|
1月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
30 2
|
1月前
|
存储 Java
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
|
1月前
|
存储 Java
什么是带有示例的 Java 中的交错数组?
什么是带有示例的 Java 中的交错数组?
46 9
|
1月前
|
Java
Java数组动态扩容和动态缩减
Java数组动态扩容和动态缩减
24 3
|
1月前
|
存储 算法 Java
Java一分钟之-数组的创建与遍历
数组作为Java中存储和操作一组相同类型数据的基本结构,其创建和遍历是编程基础中的基础。通过不同的创建方式,可以根据实际需求灵活地初始化数组。而选择合适的遍历方法,则可以提高代码的可读性和效率。掌握这些基本技能,对于深入学习Java乃至其他编程语言的数据结构和算法都是至关重要的。
29 6
|
1月前
|
存储 Java 程序员
【一步一步了解Java系列】:何为数组,何为引用类型
【一步一步了解Java系列】:何为数组,何为引用类型
23 1
|
1月前
|
存储 XML Java
如何在 Java 中将常见文档转换为 PNG 图像数组
如何在 Java 中将常见文档转换为 PNG 图像数组
15 1
|
1月前
|
存储 安全 Java
Java数组(Arrays)详解
Java 中的数组是一种用于存储固定数量同类型数据的高效数据结构,支持连续内存存储和随机访问。数组可以声明并初始化,通过索引访问和修改元素,获取长度,使用循环遍历,支持多维形式,并可通过 `Arrays` 类的方法进行复制和排序。数组具有固定大小和类型安全的特点,但需注意越界等问题。灵活运用数组能显著提升编程效率。
|
1月前
|
存储 算法 Java
带你学习java的数组军队列
带你学习java的数组军队列
35 0
下一篇
无影云桌面