Я хочу использовать цикл for для своей проблемы, а не пока. Можно ли сделать следующее?:
for(double i = 0; i < 10.0; i+0.25)
Я хочу добавить двойные значения.
Я хочу использовать цикл for для своей проблемы, а не пока. Можно ли сделать следующее?:
for(double i = 0; i < 10.0; i+0.25)
Я хочу добавить двойные значения.
Чтобы избежать укусов артефактов арифметики с плавающей запятой, вы можете использовать переменную цикла integer и получить значение с плавающей запятой в вашем цикле:
for (int n = 0; n <= 40; n++) {
double i = 0.25 * n;
// ...
}
Вместо этого вы можете использовать i += 0.25
.
Джеймс ответил на самую очевидную ошибку. Но есть более тонкая (и более поучительная версия IMO), в которой значения с плавающей запятой не должны сравниваться для (un) равенства.
Этот цикл подвержен проблемам, использует только целочисленное значение и вычисляет двойное значение внутри цикла; или, менее элегантно, дайте себе некоторый запас: for(double i = 0; i < 9.99; i+=0.25)
Изменить: исходное сравнение работает нормально, потому что 0.25 = 1/4 - это сила 2. В любом другом случае он может быть не точно представлен как число с плавающей запятой. Пример (потенциальной) проблемы:
for(double i = 0; i < 1.0; i += 0.1)
System.out.println(i);
выводит 11 значений:
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) {
//...
}
Добавленный = указывает ярлык для я = я + 0.25;
В
for (double i = 0f; i < 10.0f; i +=0.25f) {
System.out.println(i);
f указывает float
Добавленный =
указывает ярлык для я = я + 0.25;
Для целых чисел.
Мы можем использовать: 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];
}
То же самое можно сделать и для других типов данных.