Java 对于循环,按双倍递增

Java 对于循环,按双倍递增,java,for-loop,double,Java,For Loop,Double,我想用for循环来解决我的问题,而不是用while。是否可以执行以下操作: for(double i = 0; i < 10.0; i+0.25) for(双i=0;i

我想用for循环来解决我的问题,而不是用while。是否可以执行以下操作:

for(double i = 0; i < 10.0; i+0.25)
for(双i=0;i<10.0;i+0.25)

我想添加双值。

您可以使用
I+=0.25
代替。

用于(双I=0;I<10.0;I+=0.25){
for(double i = 0; i < 10.0; i+=0.25) {
//...
}
//... }

添加的=表示i=i+0.25的快捷方式

为了防止被浮点运算的伪影咬伤,您可能需要使用一个整数循环变量,并在循环中导出所需的浮点值:

for (int n = 0; n <= 40; n++) {
    double i = 0.25 * n;
    // ...
}

for(int n=0;nJames的回答抓住了最明显的错误。但还有一个更微妙(我也更具启发性)的问题,即不应将浮点值与(un)相等进行比较

该循环容易出现问题,只使用一个整数值并计算循环中的双精度值;或者,不那么优雅,给自己一些余量:
for(双精度i=0;i<9.99;i+=0.25)

编辑:原始比较正常,因为0.25=1/4是2的幂。在任何其他情况下,它可能无法精确表示为浮点数。一个(潜在)问题示例:

for(双i=0f;i<10.0f;i+=0.25f){
系统输出打印LN(i);
f表示浮动

添加的
=
表示i=i+0.25的快捷方式;

表示整数。 我们可以使用:
for(inti=0;i

for(int i=0;i

我们也可以用同样的方法处理其他数据类型。

请记住,由于舍入错误(我知道用词不当)你很可能不会以一个很好的整数结束。你的程序中
i
所取的所有值都可以精确地表示为
double
值,但是用这种方式编写带有浮点索引的循环是一个坏习惯。如果你不想看到奇怪的结果,浮点需要比这更小心ults.比如@Blindy这个精确的程序,他会的。对于一个稍有不同的程序,他不会。我想计算一个圆的面积和轮廓,直径是参数,它以1开始,以10结束,应该增加0.25。你误解了浮点问题的本质。原始问题has
i<10.0
。您能再次解释一下关于浮点等式的标准语句是如何应用于这里的吗?(请注意,当您的浮点计算准确时,使用等式是完全安全的).“当您的浮点计算是精确的”是一个棘手的句子。因为您必须确保您的十进制数接受Java的浮点数格式的精确表示(0.25恰好接受,0.2或0.1不接受)我添加了一个示例。我试图了解添加0.01有何帮助。如果计算不精确,浮点结果可能低于实际结果,也可能高于实际结果,因此您的“修复”可能会导致循环中的一个额外迭代,与程序员的意图相比,该循环已经有太多的迭代。@Pascal:你说得对!不过我已经更正了。无论如何,这也是一个糟糕的做法。我来找这个!!
 for(double i = 0; i < 1.0; i += 0.1) 
     System.out.println(i); 
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
for (double i = 0f; i < 10.0f; i +=0.25f) {
 System.out.println(i);
for (int i = 0; i < a.length; i += 2) {
            if (a[i] == a[i + 1]) {
                continue;
            }
            num = a[i];
        }