Ошибка: double cannot be dereferenced

Для решения одной задачи мне надо округлить результат деления Integer/Integer до большего целого числа (если он будет являться дробью).

Чтобы решить эту задачу я нашёл две конструкции:

Конструкция 1:

int a = 1;
int b = 3;
int x = (a+(b-1))/b;

Конструкция 2:

int a = 1;
int b = 3;
int x = Math.ceil((double)a / b).intValue();

Как я понимаю, единственно правильным будет использовать конструкцию 2, т.к. конструкция 1 работает не для всех значений (например, отрицательные b).

Проблема в том, что в своём коде при компиляции я получаю непонятную мне ошибку, на которую я не нашёл самостоятельного ответа:

java: double cannot be dereferenced

Пример моего кода:

public class Main {
    public static void main(String[] args) {
        int h = 20;
        int up = 7;
        int down = 3;

        int predUpDays = h - up;
        int progress = up - down;

        int days = Math.ceil((double)predUpDays / progress).intValue();
        days++;

        System.out.println(days);

    }
}

Что я делаю не так?


Ответы (3 шт):

Автор решения: KoVadim
Math.ceil((double)predUpDays / progress)

вот это выражение возвращает double. А это "простой тип", у него нет методов и соответственно их нельзя позвать. double это не Double.

Очень похоже, что Вам нужно где то такое

int days = (int)Math.ceil((double)predUpDays / progress);
→ Ссылка
Автор решения: Aziz Umarov

.intValue() в вашем случае это метод класса Double попробуйте как в ответе @KoVadim либо так

int days = Double.valueOf(Math.ceil((double) predUpDays / progress)).intValue();
→ Ссылка
Автор решения: Владимир Карсанов

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

int days = Math.ceil((double)predUpDays / progress).intValue();

следующим образом:

double quotient = (double) predUpDays / progress;
double ceilingResult = Math.ceil(quotient);
int days = ceilingResult.intValue();

Совершенно очевидно, что третья строчка не может быть выполнена, так как у переменной double ceilingResult не может быть не то что метода .intValue(), а вообще каких бы то ни было методов.

→ Ссылка