我必须制作一个程序来计算命令行中插入的某些数字的平均值,模态值和中位数。数字必须在[1,10]范围内我无法理解为什么它会停止。我哪里错了?这是代码:
import java.lang.Integer;
import java.util.Arrays;
class Stat{
public static void main(String[] args){
int i,median,modalValue = 0;
float average, sum = 0;
int repetition[] = new int[args.length];
Integer allNumbers[] = new Integer[args.length];
//check numbers range
try{
//reading args from command line
for( i = 0; i < args.length; i++){
//if not in range --> exception
if(Integer.parseInt(args[i]) < 1 || Integer.parseInt(args[i]) > 10)
throw new Exception("Exception: insert number out of range. Restart the programm.");
//put numbers in an array
allNumbers[i] = new Integer(args[i]);
}
//sorting the array
Arrays.sort(allNumbers);
//calculate average
for( i = 0; i < allNumbers length; i++ ){
sum += allNumbers[i];
}
average = sum / (i + 1) ;
System.out.println("Average: " + average);
//calcolate modal value (most frequent number)
for( i = 0; i < repetition.length; i++){ //counting numbers occurrences
repetition[allNumbers[i]]++;
}
for( i = 1; i < repetition.length; i++){ //checking which number occurrences the most
if(repetition[i] >= repetition[i-1])
modalValue = repetition[i];
}
System.out.println("Modal Value: " + modalValue);
//calculating median value
if((allNumbers.length) % 2 == 0){ //even
median = allNumbers.length/2;,
}else{ //odd
median = (allNumbers.length/2) + 1;
}
System.out.println("Median: " + allNumbers[median]);
}catch(Exception e) { //out of range
System.out.println(e.getMessage());
}
}
}
答案 0 :(得分:1)
第一步
如果删除try
/ catch
,您将获得有关错误的更多信息。通过捕获异常并打印出它的消息,你错过了它的堆栈跟踪,这将告诉你错误发生在哪一行。
首先,删除try
/ catch
,并允许main方法通过将其声明更改为:public static void main(String[] args) throws Exception {
来抛出异常。再次编译并运行它,以允许异常使程序崩溃。
抛出什么类型的异常?它说的是什么行号?
第二步
接下来,让我们看看一些有助于计算模态值的代码:
int repetition[] = new int[args.length];
for (i = 0; i < repetition.length; i++) {
repetition[allNumbers[i]]++;
}
第一行将创建一个数组,其元素数与命令行中提供的数字相同。例如,如果您提供数字5 8 9
,即三个数字,那么数组将包含三个元素。数组索引从零开始,因此索引将为0,1和2。
for
循环将取第一个数字allNumbers[0]
,在我的示例中为5
,并在索引5
处增加数组中的值。这会导致异常,因为数组没有索引5.这将是&#34;在边界之外&#34;数组。
这里的问题是如何创建repetition
数组。仅使用三个元素创建它是不够的。你需要考虑如何创建它,以便它能够处理你给出的[1,10]范围内的任何数字。