Java基础知识之数组常见错误、操作案例

2023-05-16

文章目录

    • 一、数组使用时的常见错误
    • 二、数组的操作案例
    • 三、评委打分案例(综合)

一、数组使用时的常见错误

1、索引越界错误

public class Test04{
	public static void main(String[] args){
		int[] arr = {10, 20, 30};
		System.out.println("arr[0]= " + arr[0]);
		System.out.println("arr[1]= " + arr[1]);
		System.out.println("arr[2]= " + arr[2]);
		System.out.println("arr[3]= " + arr[3]);
	}
}

如上代码中,arr[3]应该是越界了的,数组中只有3个元素,因此会出现越界错误。但在编译时系统不会报错,而在运行时才会报错。
1.1.1
2、空指针异常

public class Test04{
	public static void main(String[] args){
		int[] arr = {10, 20, 30};
		
		arr = null;  //将数组的地址定义为空
		System.out.println(arr[0]);
	}
}

如上代码,就在某处将数组的地址指向空了,因此会导致空指针异常,数组的值也就找不到了。同样在编译时不会报错,而是在运行时才会报错。
1.2.1

二、数组的操作案例

1、数组遍历

public class Test04{
	public static void main(String[] args){
		int[] arr = {11, 22, 33, 44, 55};
		
		System.out.println("数组中所有元素有:");
		for(int i=0; i<arr.length; i++){
			System.out.println("arr[" + i + "]= " + arr[i]);
		}
		
		System.out.println("There is bottom!");
	}
}

主要有2个点:使用for循环进行遍历,可以同时获得下标和数组值;通过arr.length可以获得数组的长度。
2.1.1
2、获取最值
(1)分析
定义一个变量,用于保存最大值(或最小值);
取数组中第一个数据作为变量的初始值;
与数组中剩余的数据逐个比对。

(2)练习代码

public class Test04{
	public static void main(String[] args){
		int[] arr = {11, 33, 55, 22, 44};
		int max = arr[0];
		
		System.out.println("数组中所有元素最大的值为:");
		for(int i=1; i<arr.length; i++){
			if(arr[i] > max){
				max = arr[i];
			}
		}
		System.out.println(max);
		
		System.out.println("There is bottom!");
	}
}

2.2.1

3、数组元素求和
(1)分析
①创建键盘录入对象,准备键盘录入
②定义一个求和变量,准备记录累加后的结果
③动态初始化一一个长度为5的int数组,准备存储键盘录入的数值
④将键盘录入的数值存储到数组中
⑤遍历数组,取出每一个元素, 并求和
⑥输出总和

(2)练习代码

public class Test04{
	public static void main(String[] args){
		int[] arr = {11, 33, 55, 22, 44};
		int sum = 0;  //定义存放求和的值,初值为0
		
		System.out.println("数组中所有元素的和为:");
		for(int i=0; i<arr.length; i++){
			sum += arr[i];  //每次都加上数组元素的值
		}
		System.out.println(sum);
		
		System.out.println("--------------This is bottom!--------------");
	}
}

2.3.1
4、数组查找(返回索引值即位置)
(1)分析
①定义一个数组,用静态初始化完成数组元素的初始化;
②键盘录入要查找的数据,用一一个变量接收;
③定义一个索引变量,初始值为-1;
④遍历数组,获取到数组中的每一个元素;
⑤拿键盘录入的数据和数组中的每一个元素进行比较,如果值相同,就把该值对应的索引赋值给索引变量,并结束循环
⑥输出索引变量。

(2)练习代码

import java.util.Scanner;  //需要用户输入
public class Test04{
	public static void main(String[] args){
		Scanner sc = new Scanner(System.in);  //实例化用户输入的对象sc
		
		int[] arr = {11, 33, 55, 22, 44};  //定义数组
		int index = -1;  //定义存放查找到的索引值
		
		System.out.print("请输入你需要查找的值(11, 33, 55, 22, 44): ");  //提示用户出入
		int data = sc.nextInt();
		
		
		for(int i=0; i<arr.length; i++){
			if(arr[i] == data){
				index = i;  //若满足查找条件,则赋值遍历到的下标给index索引变量
				break;  //同时跳出循环
			}
		}
		System.out.println(data + "在数组中的第" + (index+1) + "个位置。");
		
		System.out.println("--------------This is bottom!--------------");
	}
}

3.4.1

三、评委打分案例(综合)

1、需求
在编程竞赛中,有5个评委为参赛的选手打分,分数为0- 100的整数分。
选手的最后得分为去掉一个最高分和一 个最低分后的3个评委平均值(不考虑小数部分)。

2、步骤分析
① 定义一个数组,用动态初始化完成数组元素的初始化,长度为5
② 键盘录入评委分数
③ 由于是5个评委打分,所以,接收评委分数的操作,用循环
④ 求出数组最大值
⑤ 求出数组最小值
⑥ 求出数组总和
⑦ 按照计算规则进行计算得到平均分
⑧ 输出平均分

3、练习代码

import java.util.Scanner;  //需要用户输入
public class Test04{
	public static void main(String[] args){
		//对象声明
		Scanner sc = new Scanner(System.in);  //实例化用户输入的对象sc
		
		//变量定义
		int[] arr = new int[5];  //用动态法初始化数组
		int index = -1;  //定义存放查找到的索引值
		int max;  //存放最大值
		int min;  //存放最小值
		int sum=0;  //存放总分和(所有评委)
		int sum2=0;  //存放总分和(去掉最大值最小值)
		int ave;  //存放平均分
		
		//获取评委分数		
		for(int i=0; i<5; i++){
			System.out.print("请输入第 " + i + "次评分:");  //提示用户输入
			int score = sc.nextInt();  
			//判断输入的分数是否规范
			if(score>=0 && score<=10){
				arr[i] = score;  //把获取的分数放到定义好的数组arr中
			}else{
				System.out.println("输入分数不规范,请重新输入!");
				i--;  //同时i--,这样可以保证每个评委都输入正确分数再进行计算
			}
		}
		
		
		//找出评委分数的最大值和最小值
		max = arr[0];  //首先让最大值和最小值都等于初值
		min = arr[0];
		for(int i=1; i<arr.length; i++){
			if(arr[i] > max){
				max = arr[i];
			}
			if(arr[i] < min){
				min = arr[i];
			}
		}
		
		//对评委分数进行求和:不加最大值和最小值
		for(int i=0; i<arr.length; i++){
			if(arr[i] == max || arr[i]==min){				
				sum += arr[i];  //5位评委的总分
				continue;  //若是最大值或最小值,则该次循环不继续
			}else{
				sum2 += arr[i];  //去掉最大值最小值的总分
				sum += arr[i];  //5位评委的总分
			}
		}
		
		//对评委分数求平均值:去掉最高分和最低分总分/评委个数	
		ave = sum2/3;
		
		//对计算结果进行输出
		System.out.println("评委分数的max= " + max);
		System.out.println("评委分数的min= " + min);
		System.out.println("5位评委分数的总分为:" + sum);
		System.out.println("去掉最高分和最低分后评委总分为:" + sum2);
		System.out.println("去掉最高分和最低分后平均分为:" + ave);
		
		System.out.println("--------------This is bottom!--------------");
	}
}

3.3.1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java基础知识之数组常见错误、操作案例 的相关文章

随机推荐