我创建了一个包含15个随机浮点数的文本文件,我试图创建一个程序,从第一个到最后一个从头开始比较它们。
if (stocksList.get(i) > stocksList.get(i+1))
用于比较,scanner.nextDouble
用于比较它们。
我的问题是,当它比较它们的最后两个数字时它会产生错误,因为使用i+1
时没有第16个数字。
有没有其他方法可以解决,或者我应该使用nextLine
进行尝试并将它们从字符串转换为双倍?
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();
}
}
自上次以来我做了一些MAJOR修改,现在我遇到的问题是IndexOutOfBoundsException。如果我,但是for循环中的-1表示它消失但我丢失了我的第15行。
答案 0 :(得分:4)
这通常是错误,称为+ -1。 您应该使用以下选项之一:
同样在您的打印声明中,您可以写出当前值是上升还是下降。但是你无法了解未来,也无法将价值15与价值16进行比较。这也是同样的错误。 如果你有n个措施,你只有n - 1上升或下降。那是因为您应该创建另一个循环来打印所有值,或者添加if语句以确保您没有从数组中删除,并使一个循环遍历所有索引。
选项1:
while (scanner.hasNextLine())
{
stocksList.add(scanner.nextDouble());
}
stocks.close();
for(int i=0;i<stocksList.size(); i++)
{
System.out.printf(num + "%8.3f",stocksList.get(i));
}
for(int i=0;i<stocksList.size() - 1 ;i++)
{
... skiped code ...
}
选项2:
while (scanner.hasNextLine())
{
stocksList.add(scanner.nextDouble());
}
stocks.close();
for(int i=0;i<stocksList.size();i++)
{
if (i + 1 < stocksList.size())
{ // in other case we cant say is it count up or count down
if (stocksList.get(i) > stocksList.get(i+1))
{
countUp ++;
}
else
{
countDown ++;
}
}
... skiped code ...
System.out.printf(num + "%8.3f",stocksList.get(i));
System.out.println(" " + choice+ " " + countUp + " " +countDown);
}
答案 1 :(得分:0)
有两种解决方案:如果您正在使用&#34;用于&#34;要检查每一行,你应该像这样写for (int i = 0; i < 14; i++)
第二种解决方案涉及使用像while (scanner.hasNextLine())