一直显示空指针异常,数组为空,找不到错误在哪老师能提示下

来源:3-4 项目作业

一袋小辣椒

2021-12-28 21:07:18

package com.imooc.datamanage;


import java.util.InputMismatchException;

import java.util.Scanner;


/**

 * 1.定义一个显示菜单的方法:public void displayMenu(){}

 * 2.定义一个初始化数学成绩的方法,数组的长度和元素均由键盘输入。public float[] initScore(){}

 * 3.定义一个求平均成绩的方法:public float average(float[] f){} 4.定义一个统计成绩大于85分的人数的方法:public

 * int count(float[] f){} 5.修改指定位置处成绩的方法:public void update(float[] f,int

 * index,float newScore){}参数index为位置, 从0开始,与数组下标含义相同,newScore是新成绩。

 * 6.打印输出所有成绩的方法:public void displayAllScore(float[] f){}

 * 7.在主方法中,使用case语句完成主要程序逻辑,当输入对应的数字时,调用对应的操作。

 * 

 * @author wdl

 *

 */

public class DataManage {

/**

* 定义一个初始化数学成绩的方法,数组的长度和元素均由键盘输入。 public float[] initScore(){}

* @return

*/

public float[] initScore() {// 初始化数学成绩

int b = 0;

float[] a = null;

Scanner sc = new Scanner(System.in);

while (true) {

System.out.println("请输入要存储的数学成绩的数量:");

try {

b = sc.nextInt();

} catch (InputMismatchException e) {

System.out.println("输入的数据格式有误!不能有非数字!");

sc.next();

continue;

}

break;

}

a = new float[b];

for (int i = 0; i < a.length; i++) {

System.out.println("请输入第" + (i + 1) + "个数据:");

try {

a[i] = sc.nextFloat();

} catch (InputMismatchException e) {

System.out.println("输入的数据格式有误!不能有非数字!");

sc.next();

i--;

}

}

return a;

}


/**

* 定义一个求平均成绩的方法: public float average(float[] f){}

* @param f

* @return

*/

public float average(float[] f) {

float sum = 0;

for (float n : f) {

sum = sum + n;

}

float avg = sum / f.length;// 求平均值

return avg;

}


/**

* 定义一个统计成绩大于85分的人数的方法:public int count(float[] f){}

* @param f

* @return

*/

public int count(float[] f) {// 求大于85分的人数

int count = 0;

for (int i = 0; i < f.length; i++) {

if (f[i] > 85) {

count += 1;

}

}

return count;

}


/**

* 修改指定位置处成绩的方法:public void update(float[] f,int index,float

* newScore){}参数index为位置, 从0开始,与数组下标含义相同,newScore是新成绩。

* @param f

* @param index

* @param newScore

* @return

*/

public float update(float[] f) {// 修改指定位置处成绩

int index=0;

float newScore=0.0f;

System.out.println("修改前:");

System.out.println("成绩为:");

for (float n : f) {

System.out.println(n + " ");

}

System.out.println();

Scanner sc = new Scanner(System.in);

System.out.println("请输入要修改数据的位置(从0开始):");

while (true) {

try {

index = sc.nextInt();

} catch (InputMismatchException e) {

System.out.println("输出的必须为数字!");

sc.next();

continue;

}

break;

}

System.out.println("请输入新数据:");

try {

newScore = sc.nextFloat();

} catch (InputMismatchException e) {

System.out.println("输出的必须为数字!");

sc.next();

}

System.out.println("修改后:");

System.out.println("成绩为:");

for (float n : f) {

System.out.println(n + " ");

}

return newScore;

}


/**

* 打印输出所有成绩的方法:public void displayAllScore(float[] f){}

* @param f

*/

public void displayAllScore(float[] f) {// 打印输出所有成绩

for (int n = 0; n < f.length; n++) {

System.out.println("成绩为:" + f[n]);

}

}


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("**********************************************************");

}


public static void main(String[] args) {

DataManage dm = new DataManage();

Scanner sc = new Scanner(System.in);

int input;

int index = 0;

float[] b = null;

float newScore = 0;

float[] a = null;

while (true) {

dm.displayMenu();

System.out.println("请输入对应的数字进行操作:");

try {

input = sc.nextInt();

}catch(InputMismatchException e) {

System.out.println("输入的数据格式有误!不能有非数字!");

sc.next();

continue;

}

if (input == 0) {

System.out.println("退出程序!");

break;

}

switch (input) {

case 1:

// 初始化数学成绩

a = dm.initScore();

break;

case 2:

// 求平均值

float c = dm.average(b);

System.out.println("数学的平均成绩为:"+c);

break;

case 3:

// 大于85分的人数

int d = dm.count(b);

break;

case 4:

// 修改成绩

float e = dm.update(b);

break;

}

}


}


}


写回答

1回答

好帮手慕小明

2021-12-29

同学您好,根据报错显示是空指针异常,使用null调用方法或属性会导致该异常,在调用平均值方法进行传参时,该方法中是参数b为null,从而导致出现该异常,这里同学将初始化的成绩赋值给了a,所以这里接收的参数应修改为数组a,如下图所示:

https://img.mukewang.com/climg/61cbc5e90984f0ac07370783.jpg

祝同学学习愉快~


0

0 学习 · 9886 问题

查看课程