问题在于:
“假设你有一个数组,其中第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".
那有什么问题呢?怎么解决?非常感谢你。
答案 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行为空。 这就是你遇到错误的原因。