Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
“线程中的异常”;“主要”;java.lang.IndexOutOfBoundsException:_Java - Fatal编程技术网

“线程中的异常”;“主要”;java.lang.IndexOutOfBoundsException:

“线程中的异常”;“主要”;java.lang.IndexOutOfBoundsException:,java,Java,该程序使用以下方法: 获取用于计算平均值的数字 在计算前,获取要删除的最低数字的数目 获取权重,一个大于0且小于或等于1的双精度 计算用户输入的数字(最低n个数字除外)的加权平均值,以及 打印结果 第一个方法不应接受任何参数,并返回一个双精度数组列表 第二个方法应该不带任何参数,返回一个整数,即在计算平均值之前要删除的最小数字的数目 第三个方法不应接受任何参数并返回double(权重) 第四个方法应该有三个参数:数字数组列表(上面第一个方法的返回值);整数(计算平均值前要删除的最小项目数);和双

该程序使用以下方法:

  • 获取用于计算平均值的数字

  • 在计算前,获取要删除的最低数字的数目

  • 获取权重,一个大于0且小于或等于1的双精度

  • 计算用户输入的数字(最低n个数字除外)的加权平均值,以及

  • 打印结果

  • 第一个方法不应接受任何参数,并返回一个双精度数组列表

    第二个方法应该不带任何参数,返回一个整数,即在计算平均值之前要删除的最小数字的数目

    第三个方法不应接受任何参数并返回double(权重)

    第四个方法应该有三个参数:数字数组列表(上面第一个方法的返回值);整数(计算平均值前要删除的最小项目数);和双倍(重量)。此方法应返回一个double(除最低n值外的所有数字的加权平均值)

    第五个方法应该有四个参数:数字数组列表(上面第一个方法的返回值);整数(计算平均值前要删除的最小数的数目);双倍(重量);和双精度(上述第四种方法返回的加权平均值)。此方法不应有返回值

    例如:

    如果用户给出这些数字来计算平均值:

    40 60 80 100 20

    用户给出数字2,以指示在计算平均值之前应删除多少个最低值,并给出权重0.5,然后程序应给出以下输出:

    当使用数据40.0、60.0、80.0、100.0、20.0时,数字的加权平均值为40.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);
        }
    }
    
    import java.util.*;
    导入java.lang.*;
    导入java.util.ArrayList;
    导入java.util.Collections;
    公共类MyClass
    {
    公共静态数组列表getALInfo()
    {
    扫描仪输入=新扫描仪(系统输入);
    ArrayList输入=新的ArrayList();
    System.out.println(“请输入5-10个整数,Q表示退出:”;
    String[]tokens=in.nextLine().split(\\s”);
    for(int i=0;ilowNum)
    {
    求和=求和+输入。获取(i);
    }
    }
    总和=权重*总和;
    平均值=(总和/输入1.size());
    收益率平均值;
    }
    公共静态void getAvg(ArrayList输入,int n,双权重,双平均)
    {
    System.out.println(“当使用数据“+输入+”时,数字的加权平均值为“+平均值+”,其中“+权重+”是使用的权重,在删除最低的“+n+”值后计算平均值”);
    }
    公共静态void main(字符串参数[])
    {
    int-lowNum=0;
    双倍平均;
    双倍重量=0;
    ArrayList输入=getALInfo();
    lowNum=getLowestnum();
    重量=重量();
    平均值=calculateAvg(输入、重量、lowNum);
    getAvg(输入、lowNum、权重、平均值);
    }
    }
    
    当您输入权重后,程序运行正常,显示数组越界异常错误。你能指出我哪里做错了吗

            sum = sum + inputs.get(i);
    
    应该是

            sum = sum + inputs1.get(i);
    

    错误来自
    newarraylist(inputs.subList(lowNum,inputs.size()+1))

    因为您试图作为结束索引到达最后一个元素
    +1
    ,所以它不存在


    解决:

    new ArrayList<Double>(inputs.subList(lowNum, inputs.size()))
    
    解决

    ArrayList subList=新的ArrayList(inputs.subList(lowNum,inputs.size());
    对于(inti=0;i
    给出Thrown错误所在的行请发布完整错误如果您的问题是解决错误,不需要在java.base/java.util.ArrayList.subList的线程“main”java.lang.IndexOutOfBoundsException:toIndex=6处发布所有解释^Exception(ArrayList.java:1032)在MyClass.calculateAvg(MyClass.java:48)在MyClass.main(MyClass.java:77)上
    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);            
    }