hubert
41 уровень

Говнокод #16

Пост из группы Архив info.javarush.ru
3786 участников
double a = 47, b = 94; for (;; a += .5, b -= .5) { if (a == b) { System.out.println(a); break; } }
Комментарии (12)
  • популярные
  • новые
  • старые
Для того, что бы оставить комментарий вы должны авторизоваться
L2CCCP9 уровень, Калининград
9 июня 2015, 07:18
double a = 20, b = 94;
do
{
	a += .5;
	b -= .5;
} while(a != b);

    System.out.println(a);


Но цикл не совсем подходит для такой задачи, можно решить это быстрее и правильней.

double a = 20.5, b = 94.;
final double min = Math.min(a, b);
final double max = Math.max(a, b);
final double diff = (max - min) / 2;
a += diff;
System.out.println(a);
profeg18 уровень
16 января 2015, 02:27
Может так?
double a = 47.0,b = 94.0;
for (;; a += .5,b -= .5) {
   if ((a-b) == 0) {
   System.out.print(a);
   return;
   }
}

или так

for (; (a-b) != 0; a += .5,b -= .5) { }
System.out.print(a);

только непонятно зачем =))
billybonce29 уровень, Москва
7 мая 2014, 17:59
Ну тогда воплощая комменты выше

double a = (47+94)/2d;
double b = a;
System.out.println(a);
Izhak22 уровень, Москва
7 мая 2014, 18:28
Ну тогда уж, если не используем константы, то так
double a, b;
a = (47d + 94) / 2;
b = a;
System.out.println (a);


Или просто
System.out.println ((47d + 94) / 2);

:^)
Izhak22 уровень, Москва
7 мая 2014, 15:09
System.out.println ((a+b)/2);
SergeyKandalintsev32 уровень, Днепр
7 мая 2014, 15:41
какой результат выведет приведенный код? какой результат выведет твой код?
Spitfire33 уровень
7 мая 2014, 15:56
Вывод вроде одинаковый. Единственно отличие — переменные останутся неизменными.
Izhak22 уровень, Москва
7 мая 2014, 16:41
Предлагаю запустить
SergeyKandalintsev32 уровень, Днепр
7 мая 2014, 14:21
Хз что имеется ввиду? Поиск среднего? Даже как-то рука не поднимается здесь что-то «улучшать» :)
maximgrigorev34 уровень
24 января 2015, 14:03
Видимо да, но здесь есть 2 момента которые в данном случае не очень исправят положение, но все же на них стоит обратить внимание:
1. нет условия выхода из цикла, то есть может возникнуть ситуация что a > b и тогда цикл будет идти бесконечно.
2. Не самая лучшая идея сравнивать числа типа double через ==, чтобы в этом убедиться достаточно посмотреть на следующий код (который выдаст «False»)
System.out.println(0.1 + 0.2 == 0.3 ? "True":"False")
Speliy7 уровень
5 февраля 2015, 17:54
почему double себя так ведет? как сравнивать их?
maximgrigorev34 уровень
5 февраля 2015, 18:45
Это происходит из-за того что не всегда возможно дробную часть из двоичной системы исчисления точно преобразовать в десятичную, результат сложения 0.1 + 0.2 = 0.30000000000000004 что явно больше чем 0.3
Чтоб не возникало ошибки можно либо брать оба числа с определенной точностью, либо использовать специальные методы (к сожалению я их не знаю так как пока не сталкивался с данной проблемой, можешь поискать в библиотеке Math)