首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找出标准偏差给我"java.lang.ArrayIndexOutOfBoundsException:索引10超出长度10的界限“

找出标准偏差给我"java.lang.ArrayIndexOutOfBoundsException:索引10超出长度10的界限“
EN

Stack Overflow用户
提问于 2022-04-20 16:59:09
回答 1查看 59关注 0票数 -1

我的具体问题是在哪里我试图计算标准偏差。我查了一下如何做到这一点,并在网上找到了一个可以工作的代码。当我实现它并运行它时,我得到了错误。

线程"main“中的异常:在classes2.Supermarkets.getStanderedDeviation(Supermarkets.java:73) at classes2.Supermarkets.displayStanderedDeviation(Supermarkets.java:89) at classes2.TestSupermarket.main(TestSupermarket.java:15),classes2.TestSupermarket.main(TestSupermarket.java:15) 10超出了长度10的范围

我对java很陌生,所有的帮助都非常感谢,谢谢。

代码语言:javascript
复制
package classes2;
import java.text.NumberFormat;
import java.util.Locale;

public class Supermarkets {
    String names[];
    double profits[];
    double sum = 0, mean, n=10200000;
    NumberFormat formatter = NumberFormat.getCurrencyInstance(Locale.US);

    public Supermarkets(String[] names, double[] profits) {
        super();
        this.names = names;
        this.profits = profits;
    }

    public void displayStatus() {
        System.out.println("Original cities profit");
        System.out.printf("%-20s%s\n", "City", "Profit");
        String profit;
        for (int i = 0; i < names.length; i++) {
            profit = formatter.format(profits[i]);
            System.out.printf("%-20s%s\n", names[i], profit);
        }
        System.out.println();
    }

    public double getAverage() {
        Double totalProfit = 0.0;
        for (int i = 0; i < names.length; i++) {
            totalProfit += profits[i];
        }
        totalProfit = totalProfit / names.length;
        return totalProfit;
    }

    public void displayAverage() {
        double average = getAverage();
        System.out.println("Average profit for the Supermarket chain is " + formatter.format(average));
        System.out.println();
    }

    public void displayHighProfitCity() {
        double highProfit = 0.0;
        String highProfitCity = "";
        for (int i = 0; i < names.length; i++) {
            if (highProfit < profits[i]) {
                highProfit = profits[i];
                highProfitCity = names[i];
            }
        }
        System.out.println("Highest profit city is " + highProfitCity);
        System.out.println();
    }

    public void displayCityAboveAverageProfit() {
        double average = getAverage();
        System.out.println("Cities at or above average ");
        System.out.printf("%-20s%s\n", "City", "Profit");
        String profit;
        for (int i = 0; i < names.length; i++) {
            if (profits[i] >= average) {
                profit = formatter.format(profits[i]);
                System.out.printf("%-20s%s\n", names[i], profit);
            }
        }
        System.out.println();
    }

    public double getStanderedDeviation(){
        for(int i=0;i<n;i++)
        {
            sum=sum+profits[i];
        }
        mean=sum/n;
        System.out.println("Mean :"+mean);
        sum=0;
        for(int i=0;i<n;i++)
        {
            sum+=Math.pow((profits[i]-mean),2);

        }
        mean=sum/(n-1);
        double deviation=Math.sqrt(mean);
        return deviation;
    }

    public void displayStanderedDeviation() {
    double StanderedDeviation = getStanderedDeviation();
    System.out.println("the standard deviation is " + StanderedDeviation);
    System.out.println();
    }

        public void displayInfoInDescendingOrder () {
            String nameCopy[] = names;
            double profitCopy[] = profits;
            for (int i = 0; i < nameCopy.length; i++) {

                for (int j = i + 1; j < nameCopy.length; j++) {

                    if (profitCopy[i] > profitCopy[j]) {
                        double temp = profitCopy[i];
                        profitCopy[i] = profitCopy[j];
                        profitCopy[j] = temp;
                        String nameTemp = nameCopy[i];
                        nameCopy[i] = nameCopy[j];
                        nameCopy[j] = nameTemp;
                    }
                }
            }
            System.out.printf("%-20s%s\n", "City", "Profit");
            String profit;
            System.out.println("Cities and profit details is descending order");
            for (int i = 0; i < nameCopy.length; i++) {
                profit = formatter.format(profitCopy[i]);
                System.out.printf("%-20s%s\n", nameCopy[i], profit);
            }
            System.out.println();
        }
    }

这是我的主修课

代码语言:javascript
复制
public class TestSupermarket {
    public static void main(String[] args) {
        String cities[] = {"Miami","Sunrise","Hollywood","Tallahassee",
                "Jacksonville","Orlando","Gainesville","Pensacola","Ocala","Sebring"
        };
        double profit[] ={10200000,14600000,17000000,6000000,21600000,
                9100000,8000000,12500000,2000000,4500000};
        classes2.Supermarkets markets =new classes2.Supermarkets(cities, profit);
        markets.displayStatus();
        markets.displayAverage();
        markets.displayHighProfitCity();
        markets.displayCityAboveAverageProfit();
        markets.displayStanderedDeviation();
        markets.displayInfoInDescendingOrder();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-04-20 17:12:04

你试图循环10,200,000次,但你只有10个利润值。如果你想循环利润,使用"i < profits.length“代替这个全局变量。

祝您的Java之旅好运。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71943533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档