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.
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;
// ...
}
You can use i += 0.25
instead.
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
for(double i = 0; i < 10.0; i+=0.25) {
//...
}
The added = indicates a shortcut for i = i + 0.25;
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;
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.
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));
精彩评论