比较浮动数字错误

时间:2015-12-29 23:47:05

标签: java

我创建了一个包含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行。

2 个答案:

答案 0 :(得分:4)

这通常是错误,称为+ -1。 您应该使用以下选项之一:

  • 重写循环并将最大值设置为length - 1,
  • 添加if语句并跳过检查I或I + 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())

这样的时间