Ошибка компиляции "possible lossy conversion from double to int "

Рейтинг: -2Ответов: 2Опубликовано: 25.04.2015

Нужно отсортировать массив,но компилятор ругается,выдает ошибку

possible lossy conversion from double to int

Какую ошибку я допускаю?

int[] mas = {9,6,3,8,5,2,7,4,1};

for (int i = 0; i < mas.length; i++) {
    mas[i] = Math.floor(Math.random() * 8);
}

for (int i = 0; i < mas.length; i++) {
    System.out.print(mas[i] + " ");
}

Ответы

▲ 3Принят

Ошибка в том, что результат Math.floor имеет тип double, тогда как вы пытаетесь присвоить его переменной с типом int, что является сужающим преобразованием и может привести к потере данных, о чем вам и говорит компилятор. Чтобы это вылечить, приведите результат Math.floor к int, если потеря дробной части не критична (например, число 8.142 превратится в 8). Например так:

mas[i] = (int)Math.floor(Math.random() * 8);

Либо измените тип элементов массива с int на double

▲ 2

Дело в том, что Math.floor определен следующим образом

public static double floor(double a)
              ^^^^^^

При попытке сохранения вещественного числа в целочисленной переменной может произойти потеря данных, о чем вам выдается предупреждение

Вам нужно явно привести результат к типу int, чтобы сохрнаить в целочисленной переменной.

mas[i] = (int)Math.floor(Math.random() * 8);