2015-07-27 5 views
-2

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

Вот где отмечается ошибка в летучей мыши:

cm.getPlayer().yellowMessage("You have gained " + 
       getJQ.getCurrentMap() + " JQ points!"); 

ошибка от метода getCurrentMap(), что здесь ...

public int getCurrentMap() { 
    return maps.get((level - 1)); 
} 

уровень представляет собой целое число, которое увеличивается на единицу каждый раз, когда игрок продвигает уровень. Я не понимаю, как я получаю эту ошибку. Когда я распечатываю List<Integer> maps, я получаю список чисел. Я не понимаю, что случилось.

Вот как я объявляю его:

private int level = 0; 

Образ ошибки: Bat Error

Код: Code - Look at the methods getCurrentMap and the declaration of maps in the file. Ignore everything else.

Source Code: As you can see level is declared as an int, and getCurrentMap() only details with integers. There main lines that deal with this error are lines 29-32, and lines 59-61, where I push an array with a random value.

+3

Какую ошибку вы точно получаете? – tbolender

+1

Java не использует скрипты, вы просто означаете исходный код? –

+2

Если 'maps' является' List ', я не вижу места, где у вас есть двойной, чтобы получить ошибку при попытке сделать. Где двойной код? – azurefrog

ответ

2

Если level - это double, тогда результат будет двойной. Java не будет преобразовывать его в целое число, потому что это потеряет информацию. Таким образом, вы должны сделать это явно:

return maps.get((int) (level - 1)); 

Если level (или любой другой int) извлекается из JavaScript, код даже не будет выполняться, однако. Вы назначаете double с JavaScript на int, поэтому он даже не достигает вашего Java-кода. Примите двойную часть от JavaScript, а затем преобразуйте ее в целое число с помощью (int).

Возможно, вы захотите использовать Math.ceil первый или другой метод округления - если вы хотите округлить, а не вниз.

+0

Проблема заключается в том, что уровень фактически является int, поэтому я не вижу, где используется double. –

+0

Вы уверены? Java ** Script ** знает только дубли, а не целые числа. Может ли это что-то с этим делать? –

+0

Может быть! Я добавил двойной массив в целочисленный массив, несмотря на использование Math.floor, что может быть и так. Есть ли способ конвертировать javascript double в integer? Я использовал Math.floor, но, похоже, все еще есть плавающие точки. –

1

Если вы хотите создать целое число от double, используйте функцию типа Math.ceil или Math.round. В противном случае неоднозначно, как должно быть сделано преобразование.

+0

За исключением проблемы, с которой я столкнулся, это то, что я ТОЛЬКО использую целые числа, но это дает мне эту двойную ошибку. –

+0

... а затем набрасывается на 'int' ... –

1

У JavaScript нет целых чисел, все значение является плавающей точкой. Итак, где-то у вас есть значение с плавающей запятой, которое вы получаете от JavaScript, который вы пытаетесь рассматривать как целое. Где это происходит, непонятно из вашего вопроса.

Отбросить что-то в класс, в котором он не является подклассом, не получится; Double и Integer - оба подкласса Number, вы можете использовать Double to a Number, но не Integer. Если у вас есть двойное значение, которое вы хотите преобразовать в целое число, вы можете вызвать метод преобразования на объект обертку для Double:

new java.lang.Double(10.001D).intValue(); 

, которая возвращает целую часть и отбрасывает любую дробную часть.