求平均值及打印输出时如何只求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 星