gpt4 book ai didi

java - 比较 float 错误

转载 作者:行者123 更新时间:2023-11-29 03:01:34 24 4
gpt4 key购买 nike

我创建了一个包含 15 个随机 float 的文本文件,我正在尝试创建一个程序来比较它们,从第一个到最后一个。我用了

if (stocksList.get(i) > stocksList.get(i+1))

用于比较和 scanner.nextDouble 读取它们。我的问题是,当它在最后两个数字上比较它们时,它给出了一个错误,因为由于使用 i+1 而没有第 16 个数字。是否有另一种修复方法,或者我应该尝试使用 nextLine 并将它们从字符串转换为 double ?

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。如果我只是 for 循环中的 -1 正如许多人建议的那样它消失了但是我失去了我的第 15 行。

最佳答案

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

  • 重写你的循环并将最大值设置为长度 - 1,
  • 添加 if 语句并跳过检查 I 或 I + 1 是否离开数组

如果当前值上升或下降,也在你的打印语句中写下。但是你无法预知 future ,也无法将 value15 与 value16 进行比较。这又是同样的错误。如果您有 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);
}

关于java - 比较 float 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34520917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com