Странная ошибка Java - плавающее значение Infinity - PullRequest
0 голосов
/ 23 февраля 2011

Я новичок в Java и использую Processing для визуализации некоторых данных.Я получаю эту странную ошибку в своем коде, хотя мне было интересно, если кто-нибудь может мне помочь.Кажется, что Xspacing float продолжает устанавливаться в бесконечность, однако, когда я распечатываю выражение, для которого устанавливается правильное значение, печатается ...

  float Xspacing = (endX-(width*.04) - startX)/ values;  
  println((endX-(width*.04) - startX)/ values);  
  println(Xspacing);  

Результат:

49.0
Бесконечность

Буду признателен за любую помощь!

Извините, я написал это очень быстро и пропустил довольно необходимую информацию:

49,0 - это то, что должно быть.Все остальные типы являются числами с плавающей точкой, кроме значений, которые являются целыми числами.Код компилируется, а println встраивается в Processing, которая является фреймворком (правильный термин?), Который я использую.Это в основном функция, которая печатает на консоль в графическом интерфейсе обработки.

Xspacing был задуман как данные для моего класса "Graph", однако, когда я определяю переменную в публичной функции "drawBasic", все работает нормально.Теперь мне просто любопытно ....

Использование System.out.println (0 дает те же результаты. Начальные значения или переменные:

float startX = 120.00001
float endX =740.0
int values ​​= 12
width - это целое число (хотя и не явное), для которого задано значение 800

. Кажется странным, что в определении функции это работает нормально, только когда япопытайтесь определить его в классе, чтобы он не работал ...

Ответы [ 4 ]

1 голос
/ 14 апреля 2014

Ваш код не может быть таким, потому что число * .04 создает двойное число, и это будет означать, что вам нужно будет преобразовать выражение в число с плавающей точкой.

Чтобы ваш код скомпилировал его,должно быть что-то вроде

float Xspacing = (float)((endX-(width*.04) - startX)/ values);  
println((endX-(width*.04) - startX)/ values);  
println(Xspacing);  

Теперь о результате.Если бы ваш код имел, например:

    System.out.println(3/0);

, Java выдаст вам java.lang.ArithmeticException: / by zero

Однако, если у вас есть

    System.out.println(3f/0);

Тогда Java даст вам «Бесконечность».Зачем?http://grouper.ieee.org/groups/754/

0 голосов
/ 23 февраля 2011
float Xspacing = (endX-(width*.04) - startX)/ values; 

Даже если предположить, что переменные являются числами с плавающей точкой, строка не компилируется из-за двойного литерала 0,4.

Кроме того, 'println' не является автономным методом, поэтому вы должны написать свой собственный.

Какой у вас фактический код?

0 голосов
/ 05 февраля 2014

вы забыли ), и вы должны иметь put System.out.println(xspacing);

к вашему сведению, вы также можете просто набрать syso и ctrl spacebar, и он распечатает выписку для вас.

0 голосов
/ 23 февраля 2011

Попробуйте это:

float Xspacing = (endX-(width*.04) - startX)/ values;  
println((float)((endX-(width*.04) - startX)/ values));  
println(Xspacing);  
...