Меню

Double cannot be dereferenced java ошибка

Для решения одной задачи мне надо округлить результат деления 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);

    }
}

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

EDIT 4/23/12

double cannot be dereferenced is the error some Java compilers give when you try to call a method on a primitive. It seems to me double has no such method would be more helpful, but what do I know.

From your code, it seems you think you can copy a text representation of hours into hoursminfield by doing
hours.setText(hoursminfield);
This has a few errors:
1) hours is a double which is a primitive type, there are NO methods you can call on it. This is what gives you the error you asked about.
2) you don’t say what type hoursminfield is, maybe you haven’t even declared it yet.
3) it is unusual to set the value of a variable by having it be the argument to a method. It happens sometimes, but not usually.

The lines of code that do what you seem to want are:

String hoursrminfield; // you better declare any variable you are using

// wrap hours in a Double, then use toString() on that Double
hoursminfield = Double.valueOf(hours).toString(); 

// or else a different way to wrap in a double using the Double constructor:
(new Double(hours)).toString(); 

// or else use the very helpful valueOf() method from the class String which will 
// create a string version of any primitive type:
hoursminfield = String.valueOf(hours); 

ORIGINAL ANSWER (addressed a different problem in your code):

In double hours = Mins / 60; you are dividing two ints. You will get the int value of that division, so if
Mins = 43;
double hours = Mins / 60;
// Mins / 60 is an int = 0. assigning it to double hours makes
// hours a double equal to zero.

What you need to do is:

double hours = Mins / ((double) 60);

or something like that, you need to cast some part of your division to a double in order to force the division to be done with doubles and not ints.

Вопрос:

String mins = minsField.getText();

int Mins;
try
{
Mins = Integer.parseInt(mins);

}
catch (NumberFormatException e)
{
Mins = 0;
}

double hours = Mins / 60;

hours.setText(hoursminsfield);

Проблема заключается в том, что Double cannot be dereferenced.

Лучший ответ:

EDIT 4/23/12

double cannot be dereferenced – это ошибка, которую некоторые компиляторы Java дают, когда вы пытаетесь вызвать метод на примитиве. Мне кажется, что double has no such method будет более полезным, но что я знаю.

Из вашего кода кажется, что вы думаете, что можете скопировать текстовое представление hours в hoursminfield, выполнив   hours.setText(hoursminfield);
У этого есть несколько ошибок:
1) часов – это double, который является примитивным типом, и нет методов, которые вы можете вызвать. Это то, что дает вам ошибку, о которой вы просили.
2) вы не говорите, какой тип hoursminfield, может быть, вы еще не объявили его.
3) необычно устанавливать значение переменной, считая ее аргументом для метода. Это случается иногда, но не обычно.

Строки кода, которые делают то, что вам кажется нужным, следующие:

String hoursrminfield; // you better declare any variable you are using

// wrap hours in a Double, then use toString() on that Double
hoursminfield = Double.valueOf(hours).toString(); 

// or else a different way to wrap in a double using the Double constructor:
(new Double(hours)).toString(); 

// or else use the very helpful valueOf() method from the class String which will 
// create a string version of any primitive type:
hoursminfield = String.valueOf(hours); 

ОРИГИНАЛЬНЫЙ ОТВЕТ (обратился к другой проблеме в вашем коде):

В double hours = Mins / 60; вы разделите два int s. Вы получите значение int этого деления, так что если   Mins = 43;   двойные часы = мин /60;   //Mins/ 60 – это int = 0. Назначая его двойным часам,   // часы удваиваются, равные нулю.

Что вам нужно сделать:

double hours = Mins / ((double) 60);

или что-то в этом роде, вам нужно отбросить часть вашего деления на double, чтобы заставить деление сделать с помощью double, а не int s.

Ответ №1

Вы не указали язык, но, если это Java, существует большая разница между базовым типом double и классом double.

В любом случае ваш setText кажется неправильным. Метод setText относится к полю данных, а не к данным, которые вы пытаетесь вставить:

hoursminsfield.setText (hours);

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

Другое дело:

double hours = Mins / 60;

будет, если Mins является целым числом, дайте вам целочисленное значение, которое вы затем положите в double. Это означает, что он будет усечен. Если вы хотите, чтобы вы сохраняли точность после разделения, вы можете использовать что-то вроде:

double hours = (double) Mins / 60.0;

(хотя он может работать только с одним из этих изменений, я предпочитаю делать все выражения явными).

Ответ №2

Как насчет этого пути

double hours = Mins / 60.0

Я всегда использую вышеуказанный оператор, чтобы получить двойное значение

I am getting these errors when I try to compile my code, any idea what double cannot be dereferenced means?

Thanks

Milanco

public class Check
{

private String payee;
double amount;
private int CheckNumber;
private static int numberOfChecks = 0;

public Check (String p, double a) throws CheckException
{

payee = p;
amount = a;
CheckNumber = ++numberOfChecks;

if(amount.length() == 0)
{
throw new CheckException(«Amount empty», this);
}

if(payee == null)
{
throw new CheckException(«No payee», this);
}
}
public String toString()
{
return («Check = » + payee + «n» + «Amount = » + amount + «n» + «Check Number = » + CheckNumber);
}
}

C:mgt283codeWork1Assigment3Check.java:16: double cannot be dereferenced
if(amount.length() == 0)
^
C:mgt283codeWork1Assigment3Check.java:18: cannot resolve symbol
symbol : constructor CheckException (java.lang.String,Check)
location: class CheckException
throw new CheckException(«Amount empty», this);
^
C:mgt283codeWork1Assigment3Check.java:23: cannot resolve symbol
symbol : constructor CheckException (java.lang.String,Check)
location: class CheckException
throw new CheckException(«No payee», this);
^
3 errors

Process completed.

РЕДАКТИРОВАТЬ 4

double cannot be dereferenced это ошибка, которую выдают некоторые компиляторы Java, когда вы пытаетесь вызвать метод для примитива. По-моему double has no such method было бы более полезным, но что я знаю.

Из вашего кода кажется, что вы думаете, что можете скопировать текстовое представление hours в hoursminfield выполнив часы.setText(hoursminfield); Это имеет несколько ошибок: 1) часы — это double который является примитивным типом, для него НЕТ методов, которые вы можете вызвать. Это то, что дает вам ошибку, о которой вы спрашивали. 2) вы не говорите, что это за тип hoursminfield, возможно, вы его еще даже не объявили. 3) необычно устанавливать значение переменной, используя ее как аргумент метода. Бывает иногда, но не обычно.

Строки кода, которые делают то, что вы, кажется, хотите:

String hoursrminfield; // you better declare any variable you are using

// wrap hours in a Double, then use toString() on that Double
hoursminfield = Double.valueOf(hours).toString(); 

// or else a different way to wrap in a double using the Double constructor:
(new Double(hours)).toString(); 

// or else use the very helpful valueOf() method from the class String which will 
// create a string version of any primitive type:
hoursminfield = String.valueOf(hours); 

ОРИГИНАЛЬНЫЙ ОТВЕТ (решил другую проблему в вашем коде):

In double hours = Mins / 60; ты делишь на двоих intс. Вы получите int значение этого деления, поэтому, если Mins = 43; двойные часы = мин / 60; // Mins / 60 — это int = 0. Присвоение ему значения double hours делает // часы двойным значением, равным нулю.

Что вам нужно сделать:

double hours = Mins / ((double) 60);

или что-то в этом роде, нужно какую-то часть своей дивизии закинуть на double для того, чтобы заставить разделение быть сделано с doubles а не ints.


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

Hi, can someone briefly explain what does this error mean? And how to solve it? Thanks.

Error:
[ edited to break long lines -ds ]
[ April 18, 2004: Message edited by: Dirk Schreckmann ]


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

this.price is a double, a numeric primitive, not an object.
primitives don’t have methods.
if this.price were a Double, this.price.toString() would work.

Mike Gershman

SCJP 1.4, SCWCD in process


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

I think you’re getting the error because the primitive types — including ‘double’ — are not objects; they cannot have members, and in particular, don’t have a toString() member method. Thus, you can’t say price.toString().
Try Double.toString(price).

Accela Moon

Greenhorn

Posts: 20


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

I can use such a method, its listed in the double class in java specs from java webbie, I’ve imported java.lang.Double..


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

I can use such a method, its listed in the double class in java specs from java webbie, I’ve imported java.lang.Double
In Java there is double, and there is Double. The former one is a primitive type that has no methods, and the latter is a wrapper class that extends Number and Object, and subsequently has the corresponding methods. In your code, you can use either one, — but understand the difference.

Accela Moon

Greenhorn

Posts: 20


posted 18 years ago

  • Mark post as helpful


  • send pies

    Number of slices to send:

    Optional ‘thank-you’ note:



  • Quote
  • Report post to moderator

Oh, my bad. I’ve fixed it, thanks a million!

EDIT 4/23/12

double cannot be dereferenced — это ошибка, которую некоторые компиляторы Java дают, когда вы пытаетесь вызвать метод на примитиве. Мне кажется, что double has no such method будет более полезным, но что я знаю.

Из вашего кода кажется, что вы думаете, что можете скопировать текстовое представление hours в hoursminfield, выполнив   hours.setText(hoursminfield);
У этого есть несколько ошибок:
1) часов — это double, который является примитивным типом, и нет методов, которые вы можете вызвать. Это то, что дает вам ошибку, о которой вы просили.
2) вы не говорите, какой тип hoursminfield, может быть, вы еще не объявили его.
3) необычно устанавливать значение переменной, считая ее аргументом для метода. Это случается иногда, но не обычно.

Строки кода, которые делают то, что вам кажется нужным, следующие:

String hoursrminfield; // you better declare any variable you are using

// wrap hours in a Double, then use toString() on that Double
hoursminfield = Double.valueOf(hours).toString(); 

// or else a different way to wrap in a double using the Double constructor:
(new Double(hours)).toString(); 

// or else use the very helpful valueOf() method from the class String which will 
// create a string version of any primitive type:
hoursminfield = String.valueOf(hours); 

ОРИГИНАЛЬНЫЙ ОТВЕТ (обратился к другой проблеме в вашем коде):

В double hours = Mins / 60; вы разделите два int s. Вы получите значение int этого деления, так что если   Mins = 43;   двойные часы = мин /60;   //Mins/ 60 — это int = 0. Назначая его двойным часам,   // часы удваиваются, равные нулю.

Что вам нужно сделать:

double hours = Mins / ((double) 60);

или что-то в этом роде, вам нужно отбросить часть вашего деления на double, чтобы заставить деление сделать с помощью double, а не int s.

   String stringAmount = lineScan.next();
   double doubleAmount = Double.parseDouble(stringAmount);
   
    if(!currency1.equals("YEN") || !currency1.equals("USD") || !currency1.equals("GBP") || !currency1.equals("EUR"))
    {
        write.println(totalCount + ": " + lines);
        write.println("Starting currency not recognized");
    }
    else if(!currency2.equals("YEN") || !currency2.equals("USD") || !currency2.equals("GBP") || !currency2.equals("EUR"))
    {
        write.println(totalCount + ": " + lines);
        write.println("Ending currency not recognized");
    }
    else if(!doubleAmount.hasNextDouble())
    {
        write.println(totalCount + ": " + lines);
        write.println("Invalid conversion amount");
    }
    else if(doubleAmount < 0)
    {
        write.println(totalCount + ": " + lines);
        write.println("Invalid conversion amount");
    }

I keep receiving the «double cannot be dereferenced» error when I tried to compile my program. It occured at the ‘else if(!doubleAmount.hasNextDouble())’. I don’t really know why it’s doing this, but I believe it has something to do with ‘double doubleAmount = Double.parseDouble(stringAmount);’. I’m new to programming so I could be dead wrong. All help is appreciated.


Форум программистов Vingrad

Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Как бы сконвертировать Double в int? «double cannot be dereferenced» 

:(

   

Опции темы

Proger10
Дата 9.3.2009, 14:58 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет

У меня координаты для отрисовки хранятся в Double. Не спрашивайте почему  smile Действительно так надо. Эти даблы, они ОЧЕНЬ близки к координатам, т.е. по ним в принципе можно координировать чего-нибудь smile

Проблема возникает вот здесь:

Код
bufferedImage.getGraphics().drawRect( dbl[0].intValue(), dbl[1].intValue(), Math.round( dbl[2] ), Math.round( dbl[3] ) );

И на первые две попытки я получаю ошибку: double cannot be dereferenced
Ну а Math.round вообще только float принимает на входе.

Не подскажите ли, как привести double к int?

Добавлено через 4 минуты и 29 секунд
Блин, опять нашёл ответ чуть ли не вперёд вопроса smile

Весь гугл перерыл в поисках конвертации, ничего не подходило. Наобум попробовал:

Код

bufferedImage.getGraphics().drawRect( (int) y[0], (int) y[1], (int) y[2], (int) y[3] );

проканало. А насколько такое решение корректно?

PM MAIL   Вверх
kamre
Дата 9.3.2009, 15:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 330
Регистрация: 24.3.2006

Репутация: 1
Всего: 13

Цитата(Proger10 @ 9.3.2009,  14:58)
У меня координаты для отрисовки хранятся в Double. Не спрашивайте почему  smile Действительно так надо. Эти даблы, они ОЧЕНЬ близки к координатам, т.е. по ним в принципе можно координировать чего-нибудь smile

Если координаты хранятся действительно в double, и это по существу, то почему бы тогда и не рисовать с точностью double (и со сглаживанием)?
Например вот так:

Код

double x = 20.6;
double y = 10.5;
double w = 101.25;
double h = 60.33;
Graphics2D g2d = (Graphics2D) bufferedImage.getGraphics();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                     RenderingHints.VALUE_ANTIALIAS_ON);
g2d.draw(new Rectangle2D.Double(x, y, w, h));
PM MAIL   Вверх
Proger10
Дата 9.3.2009, 15:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Опытный
**

Профиль
Группа: Участник
Сообщений: 312
Регистрация: 16.12.2008

Репутация: нет
Всего: нет

Ухты, ещё интереснее! smile Спасибо за решение!

PM MAIL   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Java»
LSD
 
AntonSaburov

powerOn
 
tux

javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки
    кода. Используйтe чекбокс «транслит«, если у Вас
    нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка «Пометить как решённый» находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите
к нам чаще! С уважением,
LSD,
AntonSaburov,
powerOn,
tux, javastic.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Dota 2 ошибка записи на диск appmanifest
  • Dr web cureit ошибка лечения что делать