我创建了一个包含15个随机浮动数字的文本文件,我试图创建一个程序,从第一个到最后一个比较所有程序。
我使用if (stocksList.get(i) > stocksList.get(i+1))
进行比较,使用scanner.nextDouble
来阅读它们。
我的问题是,当它在最后两个数字上时,它无法对它们进行比较,因为它现在是第16个数字,因此使用i+1
会产生错误。
有没有办法让程序停在第15个数字上,这样就不会给出错误?
public static void main(String [] args)
throws IOException
{
int num, countUp, countDown, countSame;
num = 0;
countUp = 0;
countDown = 0;
countSame = 0;
FileInputStream stocks = new FileInputStream(args[0]);
Scanner scanner = new Scanner(stocks);
ArrayList<Double> stocksList = new ArrayList<Double>();
while (scanner.hasNextLine())
{
stocksList.add(scanner.nextDouble());
}
//Dilbert's Rule
for(int i=0;i<stocksList.size(); i++)
{
num++;
System.out.printf(num + "%8.3f",stocksList.get(i));
if(stocksList.get(i+1) > stocksList.get(i))
{
countUp++;
}
else if (stocksList.get(i+1) < stocksList.get(i))
{
countDown++;
}
else
{
countSame++;
}
if(countUp >= 3 && (countDown > 1 || countSame >= 1))
{
System.out.print(" " + "SELL");
countUp = 0;
countSame = 0;
}
else if (countDown >= 3 && (countUp > 1 || countSame >= 1))
{
System.out.print(" " + "BUY");
countDown = 0;
countSame = 0;
}
System.out.println();
}
}
自上次以来我做了一些主要的修改,现在唯一的错误就是IndexOutOfBoundsException
。
加上如果我,但-1
循环上的for
尽可能多地表明它消失但我丢失了我的第15行。
答案 0 :(得分:0)
您正在stocksList.get(i+1)
,而在for
循环中,您正在查看i<stocksList.size()
。这必然会给你IndexOutOfBoundsException
。
对于循环的最后一次迭代,您将i
的值设为stockList.size()-1
,并且您希望访问i+1
stockList.size()
的位置。这会给你例外。
您应该检查循环中的条件i<stocksList.size() - 1
是否发生异常。