代码输出结果和项目需求不符想问问为什么输出结果有问题

代码输出结果和项目需求不符想问问为什么输出结果有问题

package Aryyyre;

import java.util.Scanner;

public class MathArray {
	/**
	 * 显示菜单
	 */
	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[] intScore() {

		System.out.println("请输入要存储的数据");
		Scanner st = new Scanner(System.in);
		int a = st.nextInt();
		float[] f = new float[a];

		for (int i = 0; i < f.length; i++) {
			System.out.println("请输入第" + (i + 1) + "个数学成绩");
			try {
				f[i] = st.nextFloat();
			} catch (java.util.InputMismatchException E) {
				System.out.println("你输入的数字有误");
				st.next();
				i--;
			}

		}
		return f;
	}

	/**
	 * 
	 * @param f为数学成绩的平均值
	 * @return
	 */
	public float average(float[] f) {
		float sum = 0;
		for (int i = 0; i < f.length; i++) {
			sum += f[i];

		}
		float s = sum / f.length;

		return s;
	}

	/**
	 * 定义统计成绩大于85分的人数
	 * 
	 * @param f表示大于85分的人数
	 * @return
	 */
	public int count(float[] f) {
		int sum = 0;
		for (float n : f) {
			if (n > 85) {
				sum++;
			}
		}
		return sum;

	}

	/**
	 * 修改指定位置处成绩
	 * 
	 * @param f最开始的成绩
	 * @param index        成绩位置相当于数组下标
	 * @param newScore新的成绩
	 */
	public void update(float[] f, int index, float newScore) {
		System.out.println("修改前");
		System.out.println("成绩为");
		for (int i = 0; i < f.length; i++) {
			System.out.println(f[i] + "    ");
		}
		for (int i = index; i < f.length - 1; i++) {
			f[index] = newScore;
		}

	}

	/**
	 * 打印输出所有成绩
	 * 
	 * @param f为所有成绩
	 */
	public void displayAllScore(float[] f) {
		for (int i = 0; i < f.length; i++) {
			System.out.println(+f[i] + "    ");
		}
	}

	public static void main(String[] args) {
		MathArray st = new MathArray();

		Scanner s = new Scanner(System.in);
		int input;
		int index = 0;
		float newScore = 0;

		float  [] a = null;
		while (true) {
			st.displayMenu();
			System.out.println("请输入对应的数字进行操作");
			try {
				input = s.nextInt();
			} catch (java.util.InputMismatchException E) {
				System.out.println("你输入的数字有误");
				s.next();
				continue;
			}
			if (input == 0) {
				System.out.println("退出程序");
				break;
			}
			switch (input) {
			case 1:
				a=st.intScore();

				break;
			case 2:
				if (a != null) {
					float c=  st.average(a);
					System.out.println("数学平均成绩为" + c);
				} else {
					System.out.println("请为在数组中插入数据");

				}
				break;
			case 3:
				if (a != null) {
					System.out.println("数学成绩大于85分的人有" + st.count(a));
				} else {
					System.out.println("请为在数组中插入数据");
				}
				break;
			case 4:
				if (a != null) {
					System.out.println("请输入要修改的位置(从0开始)");

					try {
						index = s.nextInt();
					} catch (java.util.InputMismatchException E) {
						System.out.println("你输入的数字有误");
						s.next();
					}
					System.out.println("请输入新数据");
					try {
						newScore = s.nextFloat();
					} catch (java.util.InputMismatchException E) {
						System.out.println("你输入的数字有误");
						s.next();
					}
					st.update(a, index, newScore);
					System.out.println("修改后");
					System.out.println("成绩为");
					st.displayAllScore(a);
					
				} else {
					System.out.println("请为在数组中插入数据");
				}
				break;
			case 5:
				if(a!=null) {
					System.out.println("成绩为:");
					st.displayAllScore(a);	
				}
				else {
					System.out.println("请为在数组中插入数据");
				}
				break;
				default :
					System.out.println("输入的数字不再程序范围内");
			}
		}
	}
}


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小黑 2022-07-15 14:28:51

同学你好,同学所说的和项目需求不符合是指修改指定位置的成绩吗?

如果是那是因为同学在修改成绩前并未调用打印所用成绩的方法,修改代码如下图所示:

https://img1.sycdn.imooc.com//climg/62d1090609852fea05470252.jpg

https://img1.sycdn.imooc.com//climg/62d1090609cafc5605510156.jpg

如果不是,请同学详细说明同学的问题。

祝学习愉快!

  • 只有不是输入1其他数字都会弹出请插入数组

    2022-07-15 15:12:57
  • 同学你好,同学代码运行逻辑是符合题目要求的,按照代码运行逻辑来讲,当数组还未初始化时,操作其他功能,就会提示用户“请为在数组中插入数据”,只有当初始化数学成绩时,才会让用户进行其他操作,之所以提示用户“请为在数组中插入数据”是为了防止报空指针异常。

    祝学习愉快!

    2022-07-15 15:45:59
  • 我的意思是先输入了1后面不过输入任何数字都显示请先插入数组

    2022-07-15 17:33:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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