如何修复运行时错误:java.lang.ArrayIndexOutOfBoundsException:0

时间:2014-07-22 06:13:26

标签: java

问题在于:

  

“假设你有一个数组,其中第i个元素是a的价格   在第i天给出股票。

     

如果您只被允许完成最多一笔交易(即,   买一个并出售一股股票),设计一个算法来寻找   最大的利润。“

这是我的解决方案。

public class Solution {
    public int maxProfit(int[] prices) {
        int[] sell = new int[prices.length];
        for(int i = 0; i<prices.length; i++){
            for(int j = 0; j<i; j++){
                sell[i] = Math.max(prices[i] - prices[j], sell[i]);
            }
        }
        int sellPrice = prices[0];
        int day = 0;
        for(int i = 0; i<prices.length; i++){
            if(sellPrice < prices[i]){
                sellPrice = prices[i];
                day = i;
            }
        }

        int buyPrice = prices[0];
        for(int i = 0; i<day; i++){
            buyPrice = Math.min(buyPrice, prices[i]);
        }

        return sellPrice - buyPrice;
    }
}

我不确定它是否有效,现在不是问题。问题是,它总是在第9行显示运行时错误:(int sellPrice = prices[0];)
第18行:(int buyPrice = prices[0];) as "java.lang.ArrayIndexOutOfBoundsException: 0".

那有什么问题呢?怎么解决?非常感谢你。

6 个答案:

答案 0 :(得分:1)

价格[0]抛出AIOOBE的唯一原因是因为prices没有任何价格。

例如:

public static void main(String[] args)
{
    int[] ints = new int[] {};

    System.out.println(ints[0]);
}

抛出这个:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.main(Main.java:7)

然而,这是有效的。

public static void main(String[] args)
{
    int[] ints = new int[] {93727};

    System.out.println(ints[0]);
}

答案 1 :(得分:1)

检查您是否没有将零长度数组传递给maxProfit方法,并确保在您的方法中使用它之前初始化该数组。

答案 2 :(得分:0)

这是可能的:

ArrayIndexOutOfBoundsException

  

抛出以指示已使用非法索引访问数组。索引为负数或大于或等于数组的大小。

传递给此方法的数组为空。这不是该数组中的元素。部分

  

等于数组的大小。 (大小为0,索引为零)

这就是你案件中的原因。

答案 3 :(得分:0)

您可能因为prices数组未正确实例化而获得异常。

此外,您的算法无法保证正确:请考虑以下一组价格

$ 4,$ 5,$ 1,$ 3

最大利润为2美元,但您的算法将产生1美元。

以下是一些正确答案:Maximum single-sell profit

答案 4 :(得分:0)

你的主要看起来如何?

确保创建并初始化阵列价格[]。 如果创建它像int [] prices = new int [] {};你会看到一个错误,指出索引超出范围。 确保初始化(从用户输入或使用硬编码值)。 如果来自用户输入,请确保已分配值。

硬编码会看起来像这样:

int price [] = {100,200,500,2000,700,500,400};

希望有所帮助

答案 5 :(得分:-2)

本文给出了

当prices.length = 0时,price []在第9行和第18行为空。 这就是你遇到错误的原因。