为什么我修改后第一个成绩就变成0了

为什么我修改后第一个成绩就变成0了

http://img1.sycdn.imooc.com//climg/5e4e70430841e58215002000.jpg
为什么我修改后第一个成绩就变成0

正在回答

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

4回答

同学你好,捕获到异常之后就会自动退出,同学理解的break这样跳出循环的语句,一般是作用在循环中的哦!

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

好帮手慕小脸 2020-02-21 18:31:18

同学你好,

    1、修改后第一个成绩就变成0了?

    是因为同学update()方法放错了位置,代码修改如下:

    http://img1.sycdn.imooc.com/climg/5e4fb0ed095d3f9b06680866.jpg

除此之外,测试同学的代码问题如下:

     1、输入数组长度为非数字时,会出现 InputMismatchException异常,如下图所示:

    http://img1.sycdn.imooc.com/climg/5e4fabe5099df1b706570249.jpg

修改建议:

    这时需要对异常信息进行捕获。可以使用try{} 对键盘输入的代码进行捕获,并在catch中加上错误提示语句。代码修改如下:

    http://img1.sycdn.imooc.com/climg/5e4fac850910e76a05640272.jpg

    2、输入成绩错误时,应让用户再次输入,而不是直接展示数组中的数据,同学的代码运行效果如下:

    http://img1.sycdn.imooc.com/climg/5e4facb5091c951003800235.jpg

修改建议:

输入有误之后,我们应该让用户重新输入本次的成绩,所以这里我们可以使用i--;并跳过此次循环,进行下次循环。使其仍为本次数据赋值,修改后的代码如下图所示:

    http://img1.sycdn.imooc.com/climg/5e4fad3d095193f806400321.jpg

    3、输入成绩的时候,作业要求可以输入小数,而同学的代码无法输入小数:同学的代码运行效果如下:

    http://img1.sycdn.imooc.com/climg/5e4fad7109825e0d02990237.jpg

修改建议:

输入成绩时,这里可以改成输入float类型的: sc.nextFloat(); 修改后的代码如下图所示:

http://img1.sycdn.imooc.com/climg/5e4fada909ded68104380092.jpg

    4、建议同学可以对插入数组的位置的数字进行判断一下,避免出现数组索引越界异常。同学的代码执行效果如下:

http://img1.sycdn.imooc.com/climg/5e4fb140093a728b08120219.jpg修改建议:

建议同学可以判断一下用户输入的要修改的位置。使其在0到(数组长度-1)的范围内。避免出现数组索引越界异常

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

提问者 你午睡了嘛4287632 2020-02-21 10:27:07

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;

}

}

}

}


好帮手慕小脸 2020-02-21 10:10:24

同学你好,根据同学提供的有限条件,老师未能猜测出问题所在,建议同学贴出完整代码在“我要回答”中,方便老师解决问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 你午睡了嘛4287632 #1
    老师 代码已贴出
    2020-02-21 10:59:28
  • 提问者 你午睡了嘛4287632 #2
    谢谢老师的修改建议 我还有一个问题就是修改建议1中 我只使用了try catch语句 后面并没有跟break这样跳出循环的语句 为什么让我运行时输入字符还是可以跳出循环让我重新输入
    2020-02-21 21:09:57
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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