这个试了半天想不出

这个试了半天想不出

package test;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Homework1 {
	/**
	 * 显示菜单方法
	 */
	public void displayMenu() {
		System.out.println("**************************************");
		System.out.println("1--初始化数学成绩");
		System.out.println("2--求成绩的平均值");
		System.out.println("3--统计成绩大于85分的人数");
		System.out.println("4--修改指定位置出的成绩");
		System.out.println("5--打印输出所有成绩");
		System.out.println("0--退出");
		System.out.println("**************************************");
	}

	/**
	 * 显示数组中的元素
	 * 
	 * @param f 数组名
	 */
	public void show(float[] f) {
		System.out.println("数学成绩为:");
		for (float n : f) {
			System.out.print(n + " ");
		}
		System.out.println();
	}

	/**
	 * 初始化数学成绩方法 可插入数据,小数,另外数据长度可以由用户自己定义
	 * 
	 * @author Administrator
	 *
	 */
	public float[] initScore() {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要存储的数学成绩的数量:");
		float[] a = null;
		try {
			int b = sc.nextInt();
			a = new float[b];
			for (int i = 0; i < b; i++) {
				try {
					System.out.println("请输入第" + (i + 1) + "个数据:");
					a[i] = sc.nextFloat();
				} catch (InputMismatchException e) {
					System.out.println("输入格式有误!不能是非数字");
					sc.next();
					i--;
					continue;
				}
			}
		} catch (InputMismatchException e) {
			System.out.println("输入格式有误!不能是非数字");
			sc.next();
			return null;
		}
		return a;
	}

	/**
	 * 求平均成绩方法
	 * 
	 * @param f 数组名
	 * @return 平均值返回值
	 */
	public float average(float[] f) {
		float sum = 0, avg;
		for (int i = 0; i < f.length; i++) {
			sum += f[i];
		}
		avg = sum / f.length;
		System.out.println("数学平均成绩为:" + avg);
		return avg;

	}

	/**
	 * 统计成绩大于85分的人数的方法
	 * 
	 * @param f 数组名
	 * @return sum 人数总和
	 */
	public int count(float[] f) {
		int sum = 0;
		for (float a : f) {
			if (a >= 85) {
				sum++;
			}
		}
		System.out.println("成绩大于85分的人数为:" + sum);
		return sum;
	}

	/**
	 * 修改指定位置处的成绩
	 * 
	 * @param f        数组名
	 * @param index    修改的位置(从0开始)
	 * @param newScore 新的成绩
	 */
	public void update(float[] f, int index, float newScore) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要修改的数据的位置(从0开始):");
		try {
			index = sc.nextInt();
			System.out.println("请输入新数据:");
			newScore = sc.nextFloat();
		} catch (InputMismatchException e) {
			System.out.println("输入格式有误!不能是非数字");
			sc.next();
			return;
		}
		f[index] = newScore;
	}

	/**
	 * 主方法实现
	 * 
	 * @param args
	 */

	public static void main(String[] args) {
		Homework1 hm = new Homework1();
		Scanner sc = new Scanner(System.in);
		float[] a = null;
		int input = 0, n = 0, k = 0;// n为要修改的位置,k为修改的成绩
		while (true) {
			hm.displayMenu();
			System.out.println("请输入对应的数字进行操作:");
			try {
				input = sc.nextInt();
			} catch (InputMismatchException e) {
				System.out.println("输入格式有误!不能是非数字");
				sc.next();
				continue;
			}
			if (input == 0) {
				System.out.println("退出程序!");
				break;
			}
			switch (input) {
			case 1:
				// 插入数据
				try {
					a = hm.initScore();
				} catch (InputMismatchException e) {
					System.out.println("输入的数据格式有误,不能有非数字!");
					sc.next();
				}
				if (a != null) {
					hm.show(a);
				} else {
					System.out.println("插入数据失败,请重新选择操作!");
				}
				break;
			case 2:
				// 求成绩的平均值
				if (a != null) {
					hm.average(a);
				} else {
					System.out.println("还未在数组中插入数据,请重新选择操作!");
				}
				break;
			case 3:
				// 统计成绩大于85分的人数
				if (a != null) {
					hm.count(a);
				} else {
					System.out.println("还未在数组中插入数据,请重新选择操作!");
				}
				break;
			case 4:
				// 修改指定位置的成绩
				if (a != null) {
					System.out.print("成绩修改前");
					hm.show(a);
					hm.update(a, n, k);
					System.out.print("成绩修改后");
					hm.show(a);
				} else {
					System.out.println("还未在数组中插入数据,请重新选择操作!");
				}
				break;
			case 5:
				// 打印输出所有成绩
				if (a != null) {
					hm.show(a);
				} else {
					System.out.println("还未在数组中插入数据,请重新选择操作!");
				}
				break;
			}
		}

	}

}

http://img1.sycdn.imooc.com//climg/5f19924e094f50a207310857.jpg

修改建议:建议同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。避免出现数组索引越界异常


老师,修改成绩下标越界这里我没试出来,还有为什么要添加return啊,该怎么判别trycatch模块后面何时需要添加返回值啊

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。如下图所示:

http://img1.sycdn.imooc.com//climg/5f1a91a1098bb9f907150309.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 孫瑪戈 提问者 #1
    谢谢老师!
    2020-07-24 15:57:24
好帮手慕小尤 2020-07-24 11:02:14

同学你好,1. return是返回,在代码中遇到return,就会跳出这个方法。后边的代码就不执行了。有返回值的带着返回值跳出方法,没返回值的,直接跳出方法。所以在update()方法中捕获到异常时,会直接退出此方法,避免将成绩修改为0。

2. 同学是无法测试出数组索引越界异常吗?如果是,则当添加成绩有两位时,要修改下标为大于等于2的数据,就会报数组索引越界异常。如下图所示:同学可以进行测试

http://img1.sycdn.imooc.com//climg/5f1a4f18097c042408350313.jpg

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 孫瑪戈 #1
    老师我试了这个修改数组越界的异常,也知道范围要在0到f.length-1但自己写不出来那一块代码 /** * 修改指定位置处的成绩 * * @param f 数组名 * @param index 修改的位置(从0开始) * @param newScore 新的成绩 */ public void update(float[] f, int index, float newScore) { Scanner sc = new Scanner(System.in); System.out.println("请输入要修改的数据的位置(从0开始):"); try { index = sc.nextInt(); System.out.println("请输入新数据:"); newScore = sc.nextFloat(); } catch (InputMismatchException e) { System.out.println("输入格式有误!不能是非数字"); sc.next(); return; } f[index] = newScore; }
    2020-07-24 11:08:34
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师