Проверка значений с плавающей точкой в ​​Android с помощью ifelse - PullRequest
0 голосов
/ 19 марта 2012

Я делаю игру для Android, которая должна проверять значение с плавающей запятой x, если значение равно 320, оно должно быть сброшено до 1, а если нет, то должно быть увеличено на 15. Это код, которым я являюсь используя, но не работает:

if (x == 320) {
    x = 1;
    Parachuter p = new Parachuter(x, y);
    parachuters.add(p);
    Toast.makeText(getContext(), "x=" + x + " y=" + y, 15).show();
}
else {
    x = x + 15;
    Parachuter p = new Parachuter(x, y);
    parachuters.add(p);
    Toast.makeText(getContext(), "x=" + x + " y=" + y, 15).show();
}

Ответы [ 4 ]

1 голос
/ 08 июня 2012

Если это единственный код, который изменяет значение x, то проблема в том, что x никогда не будет 320. Если x начинается с 1 и вы увеличиваете его на 15 каждый раз, то x в конечном итоге станет 316, а затем331.

Если x начинается с 0, то становится 315, а затем 330.

Возможно, изменение вашего оператора if на test x >= 320 будет делать то, что вы хотите.

1 голос
/ 19 марта 2012

Не сравнивайте значения с плавающей точкой таким образом.Вместо x == 320.0 их следует сравнивать следующим образом:

if (Math.abs(x - 320.0) < EPS) {}

, где EPS - это небольшое значение, например 1e-6, или что-то маленькое, подобное этому.

1 голос
/ 19 марта 2012

Можете ли вы сказать нам, что не работает? При использовании поплавков попробуйте использовать расширение F, чтобы определить его с плавающей точкой (например, x == 320.0f).

У меня такое ощущение, что вы хотите знать, больше или равно положение X на 320, и в этом случае вам нужно использовать следующее:

            if (x >= 320) {
                x = 1;
                Parachuter p = new Parachuter(x, y);
                parachuters.add(p);
                Toast.makeText(getContext(), "x=" + x + " y=" + y, 15).show();
            }
            else {
                x += 15;
                Parachuter p = new Parachuter(x, y);
                parachuters.add(p);
                Toast.makeText(getContext(), "x=" + x + " y=" + y, 15).show();
            }

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

0 голосов
/ 19 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...