java数组-2

 

目录

4. 对数据进行处理

8.2.2 常见错误

1.数组下标从0开始

2.数组访问越界

8.2.3 技能训练


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;

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

表 8-1 数组元素初始值

数据类型

初始值

int

0

double

0.0

char

\u0000

boolean

false

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值