该程序使用方法来:
获取用于计算平均值的数字,
在计算之前获取要删除的最低数字的数量
得到权重,一个大于 0 且小于等于 1 的双精度值,
计算用户输入的数字(除最低n个数字外)的加权平均值,以及
打印结果。
第一个方法应该没有参数并返回一个双精度数组列表。
第二种方法应该不带任何参数并返回一个整数,即在计算平均值之前要删除的最低数字的数量。
第三种方法应该不带参数并返回双精度值(权重)
第四个方法应该接受三个参数:一个数字数组列表(上面第一个方法的返回值);一个整数(在计算平均值之前要删除的最小项目数);和双(重量)。此方法应返回双精度值(除最低 n 值之外的所有数字的加权平均值)。
第五个方法应该有四个参数:一个数字数组列表(上面第一个方法的返回值);一个整数(在计算平均值之前要删除的最小数字的数量);双倍(重量);和一个 double(从上面的第四种方法返回的加权平均值)。这个方法应该没有返回值。
例如:
如果用户给出这些数字来计算平均值:
40 60 80 100 20
并且用户给出数字 2 以指示在计算平均值之前应该删除多少个最低值,并给出 0.5 的权重,那么程序应该给出作为输出:
数字的加权平均值为 40.0,当使用数据 40.0、60.0、80.0、100.0、20.0 时,其中 0.5 是使用的权重,平均值是在去掉最低的 2 个值后计算的。
import java.util.*;
import java.lang.*;
import java.util.ArrayList;
import java.util.Collections;
public class MyClass
{
public static ArrayList<Double> getALInfo()
{
Scanner in=new Scanner(System.in);
ArrayList<Double> inputs = new ArrayList<>();
System.out.println("Please enter 5 - 10 integers, Q to quit: ");
String [] tokens = in.nextLine().split("\\s");
for (int i = 0; i < tokens.length; i++)
inputs.add(Double.parseDouble(tokens[i]));
return inputs;
}
public static int getLowestnum()
{
int lowNum = 0;
System.out.println("How many of the lowest values should be dropped? ");
Scanner in = new Scanner(System.in);
lowNum = in.nextInt();
return lowNum;
}
public static double weight()
{
Scanner in = new Scanner(System.in);
System.out.println("Enter the weight: ");
double weight = in.nextDouble();
return weight;
}
public static double calculateAvg(ArrayList<Double> inputs,double weight, int lowNum)
{
double sum = 0;
double average = 0;
Collections.sort(inputs);
ArrayList<Double> inputs1 = new ArrayList<Double>(inputs.subList(lowNum, inputs.size()+1));
for (int i = 0; i < inputs1.size(); i++)
{
if (inputs1.get(i) > lowNum)
{
sum = sum + inputs.get(i);
}
}
sum=weight*sum;
average = (sum / inputs1.size());
return average;
}
public static void getAvg(ArrayList<Double> inputs,int n,double weight, double average)
{
System.out.println("The weighted average of the numbers is " + average + ", when using the data " + inputs + " where " +weight+ " is the weight used, and the average is computed after dropping the lowest " +n+" values");
}
public static void main(String args[])
{
int lowNum = 0;
double average;
double weight=0;
ArrayList<Double> inputs= getALInfo();
lowNum = getLowestnum();
weight=weight();
average = calculateAvg(inputs,weight, lowNum);
getAvg(inputs, lowNum,weight, average);
}
}
程序运行良好,您输入重量后,它会显示数组越界异常错误。你能指出我哪里出错了。
错误来自 new ArrayList<Double>(inputs.subList(lowNum, inputs.size()+1))
因为你试图到达,作为结束索引,最后一个元素+1
所以它不存在
解决 :
new ArrayList<Double>(inputs.subList(lowNum, inputs.size()))
!! 另外,你for loop
错了
for (int i = 0; i < inputs1.size(); i++) {
if (inputs1.get(i) > lowNum) {
sum = sum + inputs.get(i);
}
}
解决
ArrayList<Double> subList = new ArrayList<>(inputs.subList(lowNum, inputs.size()));
for (int i = 0; i < subList.size(); i++) {
sum = sum + inputs.get(i);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句