一直显示空指针异常,数组为空,找不到错误在哪老师能提示下
来源: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,如下图所示:
祝同学学习愉快~
相似问题