【发布时间】:2015-10-27 05:18:39
【问题描述】:
我遇到了一些问题,我想我知道发生了什么我只是不知道如何解决它。
任务是用户最多可以输入 500 个 int(使用 BufferedReader 而不是扫描仪)并将 int 传递给方法并进行一些计算。输入在一行中,中间有一个空格,当用户点击输入时停止。 我的问题是计算中位数,现在我得到一个 NullPointerException。 我确实将我的 int 数组初始化为 500 的大小并且字符串数组没有初始化,但 Median 方法总是计算为0,我意识到这是因为我将所有 500 个索引都传递到计算中,并且未使用的索引设置为零。
如果用户没有输入所有 500 个 int,我不知道如何将数组初始化为 500 并且不会出错或计算不正确。
注意:没有提示给用户,也不允许退出短语,当用户按回车时它应该退出。这是我的代码,感谢您提供任何提示或为我指明正确的方向!
public class StatPackage {
private static int intScoresArr[];
private static String inputArr[] = new String [500];
public static void main(String[] args) throws IOException {
String inputValues;
double count = 0;
double average, median;
NumberFormat NF = NumberFormat.getNumberInstance();
NF.setMinimumFractionDigits(2);
NF.setMaximumFractionDigits(2);
InputStreamReader ISR = new InputStreamReader(System.in);
BufferedReader BR = new BufferedReader(ISR);
while((inputValues = BR.readLine()) != null) {
inputArr = inputValues.split("\\s");
for(int i = 0; i < inputArr.length; i++) {
intScoresArr[i] = Integer.parseInt(inputArr[i]);
count++;
}
//Call calcMean calculate average
average = calcMean(intScoresArr, count);
System.out.println(NF.format(average));
//Call calcMedian, calculate median
median = calcMedian(intScoresArr, count);
System.out.println(median);
}
}
//Calculate the mean (average)
public static double calcMean(int scores[], double count) {
double average = 0;
for(int i = 0; i < inputArr.length; i++) {
average = average + scores[i] / count;
}
return average;
}
public static double calcMedian(int scores[], double count) {
Arrays.sort(scores);
double middle = 0;
int countInt;
if(count % 2 == 1) {
count = (count + 1) / 2;
middle = scores[(int)count - 1];
}
else if(count % 2 == 0) {
count = (count + 1) / 2;
middle = (scores[(int)count] + scores[(int)count+1]) / 2;
}
return middle;
}
【问题讨论】:
-
进行空检查?
if(scores[i] != null)
标签: java arrays nullpointerexception null