老师,我在存储成绩个数哪里不太会,可以请教一下么
卡在菜单那里动不了了,问题应该在键入方法那里,如果不用键入n,直接给定长度6就一切正常
package com.imooc.DataManage;
import java.util.Scanner;
/**
* 从键盘接收整型数据存放到数组中,并对数组中的数据进行管理
*
* @author Administrator
*
*/
public class Data {
/**
* 显示菜单
*/
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("**********************");
}
/**
* 从键盘接收数据
*
* @return 接收数据的数组
*/
public float[] initScore() {
int n=0;
float[] f = new float[n];
Scanner sc = new Scanner(System.in);
// 少接收一个数据,为在指定位置处插入数据做准备
for (int i = 0; i < f.length - 1; i++) {
System.out.println("请输入需要存储的数学成绩的个数:");
n=sc.nextInt();
System.out.println("请输入第" + (i + 1) + "个数据:");
try {
f[i] = sc.nextFloat();
} catch (java.util.InputMismatchException e) {
System.out.println("输入的数据格式有误,不能有非数字!");
sc.hasNext();
i--;
}
}
return f;
}
/**
* 显示成绩 的平均值
*
* @param f 接收数组的数据
* @return 接收平均值的数据
*/
public float average(float[] f) {
float sum = 0;
float ave;
for (int i = 0; i < f.length; i++) {
sum = sum + f[i];
}
ave = sum / f.length;
return ave;
}
/**
* 统计成绩大于85的人数
* @param f
* @return
*/
public int count(float[] f) {
int sum=0;
for (float n : f) {
if (n > 85) {
sum++;
}
}
if (sum == 0) {
System.out.println("没有人成绩大于85!");
} else {
System.out.println("成绩大于85的人数为:"+sum);
}
return sum;
}
/**
* 从键盘接收一个数据,插入到数组的指定位置处
* @param f 要插入数据的数组
* @param 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;
for(float n:f) {
System.out.println(" "+n+" ");
}
}
/**
* 打印输出所有成绩
* @param f
*/
public void displayAllScore(float[] f) {
for(float n:f) {
System.out.print(" "+n+" ");
}
}
public static void main(String[] args) {
Data D=new Data();
Scanner sc=new Scanner(System.in);
int input=0;
float[] f=null;
float newScore=0;
int index=0;
//newScore表示要插入的数据,index表示要插入的位置
while(true) {
D.displayMenu();
System.out.println("请输入对应的数字进行操作!");
try {
input=sc.nextInt();
}catch(java.util.InputMismatchException e){
System.out.println("输入格式有误,不能有非数字!");
sc.next();
continue;
}
if(input==0) {
System.out.println("退出程序!");
break;
}
switch (input) {
case 1:
//插入数据
f=D.initScore();
break;
case 2:
//平均成绩
float f1=D.average(f);
System.out.println(f1);
break;
case 3:
//统计成绩大于85的人数
D.count(f);
case 4:
//修改指定位置处的成绩
if(f!=null) {
System.out.println("请输入要插入的数据:");
newScore=sc.nextFloat();
System.out.println("请输入要插入的位置:");
index=sc.nextInt();
break;
}
case 5:
//打印输出所有成绩
D.displayAllScore(f);
}
if(input<0||input>5) {
System.out.println("输入数据超出范围,请重新输入");
}
}
}
}
正在回答 回答被采纳积分+1
同学你好,【菜单】
问题:尚未输入成绩之前,求成绩平均值,修改成绩,统计大于85分人数,打印输出成绩时,会报空指针异常运行效果如下:
修改建议:建议同学在调用方法前,先判断一下要操作的数组是否为null,如果不 为null再进行下一步的操作,如果为null,可以提示用户请先插入数据。修改后代码如下:
【初始化】
问题:建议在循环外为变量赋值,并使用try{} 对键盘输入的代码进行捕获异常。修改后代码如下:
【修改成绩】
问题1:建议同学在修改前展示一下修改前的数据。在修改后,再展示一下修改后的 数据。同学的代码运行效果如下:
修改建议:建议同学在修改前调用一下打印输出所有成绩的方法。修改后代码如下:
问题2:未成功修改成绩,建议同学在case4中调用update()方法,修改后代码如下:
问题3:建议同学可以对插入数组的位置的数字进行判断一下,避免出现数组索引越界异常。同学的代码执行效果如下:
修改建议:建议同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。避免出现数组索引越界异常。
【输出成绩】
问题:同学的代码输出的时候,会把菜单第一行拼接到一起,同学的运行效果如下:
修改建议:建议同学循环输出后,在循环的外边添加一个输出语句,用来换行。修改后代码如下:
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星