求平均值及打印输出时如何只求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; } } } }
正在回答
同学你好,try....catch结构建议同学放置到for循环中,而存储学生的数量的异常处理在for循环外面。修改后代码如下:
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; }
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好,只求5个成绩的平均值,那就只需要输出5个成绩即可。
同学代码中的问题如下:
1、同学可以添加一个使用键盘输入的int类型的变量。并且new新的数组的时候,这个新的变量作为数组的长度。而不是直接定义为10,且没有起到任何意义。
2、输入成绩错误时,应让用户再次输入,而不是继续输入下一个,同学的代码运行效果如下:
修改建议:
输入有误之后,我们应该让用户重新输入本次的成绩,所以这里我们可以使用i--;并跳过此次循环,进行下次循环。使其仍为本次数据赋值,修改后的代码如下图所示:
3、建议同学可以对插入数组的位置的数字进行判断一下,避免出现数组索引越界异常。同学的代码执行效果如下:
修改建议:
建议同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。避免出现数组索引越界异常
4、同学的代码输出的时候,会把菜单第一行拼接到一起,同学的运行效果如下:
修改建议:
建议同学循环输出后,在循环的外边添加一个输出语句,用来换行。
5、当选择菜单时,当输入0-5之外的数字时,没有错误提示,同学的运行效果如下:
修改建议:
在switch语句中可以添加default判断,并输出提示语句,例如:“输入的数字有误,请重新输入”的提示。修改后的代码如下:
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星