正在回答
同学你好,捕获到异常之后就会自动退出,同学理解的break这样跳出循环的语句,一般是作用在循环中的哦!
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
同学你好,
1、修改后第一个成绩就变成0了?
是因为同学update()方法放错了位置,代码修改如下:
除此之外,测试同学的代码问题如下:
1、输入数组长度为非数字时,会出现 InputMismatchException异常,如下图所示:
修改建议:
这时需要对异常信息进行捕获。可以使用try{} 对键盘输入的代码进行捕获,并在catch中加上错误提示语句。代码修改如下:
2、输入成绩错误时,应让用户再次输入,而不是直接展示数组中的数据,同学的代码运行效果如下:
修改建议:
输入有误之后,我们应该让用户重新输入本次的成绩,所以这里我们可以使用i--;并跳过此次循环,进行下次循环。使其仍为本次数据赋值,修改后的代码如下图所示:
3、输入成绩的时候,作业要求可以输入小数,而同学的代码无法输入小数:同学的代码运行效果如下:
修改建议:
输入成绩时,这里可以改成输入float类型的: sc.nextFloat(); 修改后的代码如下图所示:
4、建议同学可以对插入数组的位置的数字进行判断一下,避免出现数组索引越界异常。同学的代码执行效果如下:
修改建议:
建议同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。避免出现数组索引越界异常
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
package com.Homework;
import java.util.Scanner;
/**
* 学生成绩管理
*
* @author zbc
*
*/
public class HomeWork {
/**
* 显示菜单
*/
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 a
*/
public float[] initScore() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要查询学生的数量:");
float[] f;
int x = sc.nextInt();
f = new float[x];
for (int i = 0; i < f.length; i++) {
System.out.println("请输入第" + (i + 1) + "个数据");
try {
f[i] = sc.nextInt();
} catch (java.util.InputMismatchException e) {
System.out.println("输入数据格式有误,请重新输入!");
sc.next();
break;
}
}
return f;
}
/**
* 计算平均分
*
* @param a 接受数组
* @return avg
*/
public float average(float[] f) {
float avg = 0;
for (int i = 0; i < f.length; i++) {
avg += f[i];
}
avg=avg/f.length;
System.out.println("数学平均成绩为:" + avg);
return avg;
}
/**
* 统计成绩大于85分的人数
*
* @param f
* @return i
*/
public int count(float[] f) {
String str = "";
int i = 0;
for (float n : f) {
if (n > 85) {
str += n+" ";
i++;
}
}
System.out.println("成绩大于85分的有" + i + "人");
System.out.println("成绩大于85分的有" + str);
return i;
}
/**
* 修改成绩
*
* @param f 数组
* @param index 修改的位置
* @param newScore 修改后的数据
*/
public void update(float[] f, int index, float newScore) {
f[index] = newScore;
}
/**
* 打印输出数学成绩
*
* @param f 数组
*/
public void displayAllScore(float[] f) {
System.out.println("数学成绩为:");
for (int i = 0; i < f.length; i++) {
System.out.print(f[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
HomeWork dm = new HomeWork();
Scanner sc = new Scanner(System.in);
float[] f = null;
int count = 0;
int index=0;
float newScore=0;
while (true) {
dm.displayMenu();
System.out.println("请输入对应的数字进行操作:");
try {
count = sc.nextInt();
} catch (java.util.InputMismatchException e) {
System.out.println("输入数据格式有误,请重新输入!");
sc.next();
continue;
}
if (count == 0) {
System.out.println("退出");
break;
}
switch (count) {
case 1:
f = dm.initScore();
System.out.println("数组中的数据为:");
dm.displayAllScore(f);
break;
case 2:
if(f!=null) {
dm.average(f);
}else {
System.out.println("还未初始化数据,请重新输入");
break;
}
break;
case 3:
if(f!=null) {
dm.count(f);
}else{
System.out.println("还未初始化数据,请重新输入");
break;
}
break;
case 4:
if(f!=null){
System.out.println("修改前:");
dm.displayAllScore(f);
dm.update(f, index, newScore);
try {
System.out.println("请选择要修改的位置");
index = sc.nextInt();
System.out.println("请填写要修改的数据");
newScore = sc.nextFloat();
} catch (java.util.InputMismatchException e) {
System.out.println("输入数据格式有误,请重新输入!");
sc.next();
break;
}
System.out.println("修改后的数据为:");
dm.displayAllScore(f);
}else{
System.out.println("还未初始化数据,请重新输入");
break;
}
break;
case 5:
if(f!=null) {
dm.displayAllScore(f);
}else {
System.out.println("还未初始化数据,请重新输入");
break;
}
break;
default:
System.out.println("不在范围中");
break;
}
}
}
}
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星