Возможная потеря точности / [тип] не может быть разыменована - PullRequest
2 голосов
/ 20 мая 2010

Я много смотрю вокруг, но просто не могу найти хорошее решение для этого ...

Point mouse = MouseInfo.getPointerInfo().getLocation();

int dx = (BULLET_SPEED*Math.abs(x - mouse.getX()))/
                    (Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
                    (x - mouse.getX())/Math.abs(x - mouse.getX());

В этом созвездии я получаю: Возможная потеря точности при изменении, например *От 1004 * до (x - mouse.getX()).doubleValue() он говорит, что double нельзя разыменовать, когда я добавляю intValue () где-то, что он говорит, что int нельзя разыменовать.В чем моя ошибка?

[x, y - целые числа |BULLET_SPEED - это static final int]

Спасибо!

Ответы [ 2 ]

3 голосов
/ 20 мая 2010

Я бы сохранил x, y и BULLET_SPEED как double, выполнил бы всю арифметику в double и затем произвел бы к int последний шаг.

1 голос
/ 20 мая 2010

Просто разыграть с (int)

int i = (int) 3.14159; // compiles fine

Это не предотвратит потери точности, но для компилятора ясно, что это то, что вам нужно, поэтому код будет компилироваться.

Имейте в виду, где кастинг находится в приоритете.

int i = (int) .1D + .1D; // doesn't compile!!!
int j = (int) (.1D + .1D); // compiles fine

Похожие вопросы


Об ошибках разыменования

Примитивы не являются объектами; у них нет членов.

    Integer ii = 42; // autoboxing
    int i = ii.intValue(); // compiles fine
    int j = i.intValue(); // doesn't compile

Смотри также


Таким образом, в этом конкретном случае вы можете сделать следующее:

int dx = (int) (BULLET_SPEED*Math.abs(x - mouse.getX()))/
                (Math.abs(y - mouse.getY()) + Math.abs(x - mouse.getX()))*
                (x - mouse.getX())/Math.abs(x - mouse.getX());
...