DarkLeafyGreen
DarkLeafyGreen

Reputation: 70426

for-loop, increment by double

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.

Upvotes: 24

Views: 62276

Answers (7)

mojtaba
mojtaba

Reputation: 94

private int getExponentNumber(double value){
    String[] arr;
    String strValue = String.valueOf(value);
    if (strValue.contains("E")){
        arr = strValue.split("E");
        return Math.abs(Integer.parseInt(arr[1]));
    }
    else if (strValue.contains(".")){
        arr = strValue.split("\\.");
        return arr[1].length();
    }
    return 0;
}
private int getMinExponent(int start, int stop, int step){
    int minExponent = Math.max(Math.abs(start), Math.abs(stop));
    minExponent = Math.max(minExponent, Math.abs(step));
    return minExponent;
}

    double start = 0;
    double stop = 1.362;
    double step = 2E-2;
    int startExp = getExponentNumber(start);
    int stopExp = getExponentNumber(stop);
    int stepExp = getExponentNumber(step);
    int min = getMinExponent(startExp, stopExp, stepExp);
    start *= Math.pow(10, min);
    stop *= Math.pow(10, min);
    step *= Math.pow(10, min);

   for(int i = (int)start; i <= (int)stop; i += (int)step)
        System.out.println(i/Math.pow(10, min));

Upvotes: 0

Nikhil Kumar
Nikhil Kumar

Reputation: 2904

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.

Upvotes: 0

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;

Upvotes: 2

JamesMLV
JamesMLV

Reputation: 2266

You can use i += 0.25 instead.

Upvotes: 28

Valchris
Valchris

Reputation: 1481

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

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

Upvotes: 3

leonbloy
leonbloy

Reputation: 75966

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

Upvotes: 11

rsp
rsp

Reputation: 23373

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;
    // ...
}

Upvotes: 55

Related Questions