求平均值及打印输出时如何只求5个成绩的平均值,只输出5个成绩?其他代码问题,麻烦老师指正。谢谢!!

求平均值及打印输出时如何只求5个成绩的平均值,只输出5个成绩?其他代码问题,麻烦老师指正。谢谢!!

package com.wangyg.DataManage;

import java.util.Scanner;

public class DataManage1 {
	/**
	 * 定义一个显示菜单的方法
	 */
	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--退出");
	}
	/**
	 * 定义一个初始化数学成绩的方法,数组的长度和元素均由键盘输入
	 * @return
	 */
	public float[] initScore() { 
		float[] score=new float[10];
		int count;
		System.out.println("请输入要存储的数学成绩的数量");
		Scanner sc = new Scanner(System.in);
		
		try {
			count =sc.nextInt();
			for(int i=0;i<count;i++) {
				System.out.println("请输入第"+(i+1)+"个数据:");
				score[i]=sc.nextFloat();
			}
			}catch(java.util.InputMismatchException e) {
				System.out.println("输入的数字类型不正确");
				sc.next();
			}
		
		return score;
	}
	/**
	 * 定义一个求平均成绩的方法
	 * @param f
	 * @return
	 */
	public float average(float[] f) { 
		float avg=0,sum=0;
		for(float n:f) {
			sum=sum+n;
		}
		avg=sum/f.length;
		System.out.println("数学平均成绩为:"+avg);
		return avg;
	}
	/**
	 * 定义一个统计成绩大于85分的人数的方法
	 * @param f
	 * @return
	 */
	public int count(float[] f) {
		int countmax=0;
		for(int i=0;i<f.length;i++) {
			if(f[i]>85) {
				countmax++;
			}
		}
		System.out.println("成绩大于85分的人数为:"+countmax);
		return countmax;
	}
	/**
	 * 修改指定位置处成绩的方法
	 * @param f
	 * @param index参数index为位置,从0开始,与数组下标含义相同
	 * @param newScore新的成绩
	 */
	public void update(float[] f, int index, float newScore) {
		
		
		for(int i=f.length-1;i>index;i--) {
			f[i]=f[i-1];
		}
		f[index]=newScore;
		System.out.println("修改后:");
		System.out.println("成绩为:");
		for(float n:f) {
			System.out.print(n+"  ");
		}
	} 
	/**
	 * 打印输出所有成绩的方法
	 */
	public void displayAllScore(float[] f) {
		System.out.println("成绩为:");
		for(float n:f) {
			System.out.print(n+"  ");
		}
		
	}

	public static void main(String[] args) {
		int input;
		float a[]=null;
		DataManage1 dm =new DataManage1();
		Scanner sc =new Scanner(System.in);
		while(true) {
			dm.displayMenu();
			System.out.println("请输入对应的数字进行操作:");
			try {
			input=sc.nextInt();
			}catch(java.util.InputMismatchException e) {
				System.out.println("输入的数字类型不正确");
				sc.next();
				break;
			}
			int m;
			float n;
			if(input==0) {
				System.out.println("退出");
				break;
			}
			switch(input) {
			case 1:
				a=dm.initScore();
				break;
			case 2:
				if(a!=null) {
					dm.average(a);
				}else {
					System.out.println("还未在数组中插入数组元素,请重新选择操作!");
				}
				break;
			case 3:
				if(a!=null) {
					dm.count(a);
				}else {
					System.out.println("还未在数组中插入数组元素,请重新选择操作!");
				}
				break;
			case 4:
				if(a!=null) {
					System.out.println("修改前:");
					System.out.println("成绩为:");
					for(float d:a) {
						System.out.print(d+"  ");
					}
					System.out.println("请输入要修改数据的位置(从0开始):");
					try {
					m=sc.nextInt();
					System.out.println("请输入新数据:");
					n=sc.nextFloat();
					dm.update(a, m, n);
					}catch(java.util.InputMismatchException e) {
						System.out.println("输入的数字类型不正确");
						sc.next();
						break;
					}
					
				}else {
					System.out.println("还未在数组中插入数组元素,请重新选择操作!");
				}
				break;
			case 5:
				if(a!=null) {
					dm.displayAllScore(a);
				}else {
					System.out.println("还未在数组中插入数组元素,请重新选择操作!");
				}
				break;
			}
		}

	}

}


正在回答

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

2回答

同学你好,try....catch结构建议同学放置到for循环中,而存储学生的数量的异常处理在for循环外面。修改后代码如下:

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

public float[] initScore() { 
			int count=0;	
			System.out.println("请输入要存储的学生的数量");
			Scanner sc = new Scanner(System.in);
			try {
				count =sc.nextInt();
			}catch(java.util.InputMismatchException e) {
				System.out.println("输入的数字类型不正确");
				sc.next();
			}
			float[] score=new float[count];
			for(int i=0;i<count;i++) {
				try {
					System.out.println("请输入第"+(i+1)+"个数据:");
					score[i]=sc.nextFloat();
				}catch(java.util.InputMismatchException e) {
					System.out.println("输入的数字类型不正确");
					sc.next();
					i--;
					continue;
				}	
			}		
			return score;
		}

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

好帮手慕小脸 2020-02-29 18:21:10

同学你好,只求5个成绩的平均值,那就只需要输出5个成绩即可。

同学代码中的问题如下:

    1、同学可以添加一个使用键盘输入的int类型的变量。并且new新的数组的时候,这个新的变量作为数组的长度。而不是直接定义为10,且没有起到任何意义。

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

    2、输入成绩错误时,应让用户再次输入,而不是继续输入下一个,同学的代码运行效果如下:

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

修改建议:

输入有误之后,我们应该让用户重新输入本次的成绩,所以这里我们可以使用i--;并跳过此次循环,进行下次循环。使其仍为本次数据赋值,修改后的代码如下图所示:

http://img1.sycdn.imooc.com//climg/5e5a398f09c98e6307080219.jpg    3、建议同学可以对插入数组的位置的数字进行判断一下,避免出现数组索引越界异常。同学的代码执行效果如下:

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

修改建议:

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

    4、同学的代码输出的时候,会把菜单第一行拼接到一起,同学的运行效果如下:

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

修改建议:

建议同学循环输出后,在循环的外边添加一个输出语句,用来换行。

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

    5、当选择菜单时,当输入0-5之外的数字时,没有错误提示,同学的运行效果如下:

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

修改建议:

在switch语句中可以添加default判断,并输出提示语句,例如:“输入的数字有误,请重新输入”的提示。修改后的代码如下:

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

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

  • 提问者 慕粉4148649 #1
    public float[] initScore() { int count=0; float[] score=new float[count]; System.out.println("请输入要存储的数学成绩的数量"); Scanner sc = new Scanner(System.in); try { count =sc.nextInt(); for(int i=0;i<count;i++) { System.out.println("请输入第"+(i+1)+"个数据:"); score[i]=sc.nextFloat(); } }catch(java.util.InputMismatchException e) { System.out.println("输入的数字类型不正确"); sc.next(); i--; continue; } return score; } 代码中i--;这报错
    2020-02-29 22:25:14
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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