for-loop, increment by double

2019-01-14 03:18发布

问题:

I want to use the for loop for my problem, not while. Is it possible to do the following?:

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

I want to add double values.

回答1:

To prevent being bitten by artifacts of floating point arithmetic, you might want to use an integer loop variable and derive the floating point value you need inside your loop:

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


回答2:

You can use i += 0.25 instead.



回答3:

James's answer caught the most obvious error. But there is a subtler (and IMO more instructive) issue, in that floating point values should not be compared for (un)equality.

That loop is prone to problems, use just a integer value and compute the double value inside the loop; or, less elegant, give yourself some margin: for(double i = 0; i < 9.99; i+=0.25)

Edit: the original comparison happens to work ok, because 0.25=1/4 is a power of 2. In any other case, it might not be exactly representable as a floating point number. An example of the (potential) problem:

 for(double i = 0; i < 1.0; i += 0.1) 
     System.out.println(i); 

prints 11 values:

0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999


回答4:

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

The added = indicates a shortcut for i = i + 0.25;



回答5:

In

for (double i = 0f; i < 10.0f; i +=0.25f) {
 System.out.println(i);

f indicates float

The added = indicates a shortcut for i = i + 0.25;



回答6:

For integer. We can use : for (int i = 0; i < a.length; i += 2)

for (int i = 0; i < a.length; i += 2) {
            if (a[i] == a[i + 1]) {
                continue;
            }
            num = a[i];
        }

Same way we can do for other data types also.