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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с созданием метода 
:(
    Опции темы
FrenchCheese
Дата 19.11.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Только начал изучение Java, столкнулся с проблемой...
Код

class vector {
    double x;
    double y;
    double z;
}

вот есть такой простенький класс и мне надо написать к нему методы

начал с тестов попроще..
почему такой код не работает?

Код

class Test {
    class digit {
     int a;
     
     int add (digit x, digit y) {
         return (x.a + y.a);
     }
    }

    
    
    public static void main(String[] args) {

     digit a = new digit();
     digit b = new digit();
     a.a = 1;
     b.a = 2;
     System.out.println(add(a,b));
     
    }

}

PM MAIL   Вверх
Nofate
Дата 19.11.2010, 13:51 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Много почему.

Например, строка 18. Вызывается метод add без указания экземпляра класса. 
Кроме того надо бы членам класса digit (а лучше переименовать его в Digit)  установить спецификаторы доступа.



--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
FrenchCheese
Дата 19.11.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Nofate @ 19.11.2010,  13:51)
Например, строка 18. Вызывается метод add без указания экземпляра класса. 

это как?

и для чего добавлять спецификаторы доступа? зачем они здесь?
PM MAIL   Вверх
Nofate
Дата 19.11.2010, 15:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вы вызываете add(a, b). Как компилятор догадается в каком классе искать этот метод?




--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
FrenchCheese
Дата 19.11.2010, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Nofate @ 19.11.2010,  15:09)
вы вызываете add(a, b). Как компилятор догадается в каком классе искать этот метод?

ага, мысль понял, но запутался...
как таки ему дать понять где искать?
что загуглить? что прочитать?
PM MAIL   Вверх
Nofate
Дата 19.11.2010, 15:46 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У вас есть класс digit. В общем случае вы можете обращаться к методам класса через экземпляры данного класса.

Экземплярами класса digit в вашем примере будут как раз a и b

То есть вы можете написать:
Код

a.add(a, b);


Но тогда получается масло масляное. Ведь из метода add мы итак можем обратиться к значению члена a. Так что один параметр можно будет из метода add убрать, немного изменив его тело.

Вобщем почитайте самые основы. Что такое классы и как именно они работают. И про ключевое слово this заодно. Почитать можно например на ИНТУИТе


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
FrenchCheese
Дата 19.11.2010, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Nofate @ 19.11.2010,  15:46)
У вас есть класс digit. В общем случае вы можете обращаться к методам класса через экземпляры данного класса.

Экземплярами класса digit в вашем примере будут как раз a и b

То есть вы можете написать:
Код

a.add(a, b);


Но тогда получается масло масляное. Ведь из метода add мы итак можем обратиться к значению члена a. Так что один параметр можно будет из метода add убрать, немного изменив его тело.

Вобщем почитайте самые основы. Что такое классы и как именно они работают. И про ключевое слово this заодно. Почитать можно например на ИНТУИТе

огромное спасибо!
PM MAIL   Вверх
duk
Дата 19.11.2010, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Some Object
*


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

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



Что-то похожее, на Ваш код:
Код

class Test {
    static class Digit {
     int a;
     
     int add (Digit x, Digit y) {
         return (x.a + y.a);
     }
    }
    
    
    public static void main(String[] args) {
     Test.Digit a = new Digit();
     Test.Digit b = new Digit();
     a.a = 1;
     b.a = 2;
     System.out.println(a.add(a,b));
     
    }
}

PM MAIL   Вверх
Nofate
Дата 19.11.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



@duk
Ну вот, все испортили. А человек уже почти сам разобрался )


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
nc30
Дата 20.11.2010, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


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

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



FrenchCheese,
IMHO, Nofate, указал вам правильное направление.  От себя добавлю пару слов.
Не стоит без знания самых основ пытаться создавать свои примеры. Иначе с самого начала вы научитесь неправильно мыслить и плохо излагать свои идеи в коде. Переучиваться будет гораздо сложнее + потеряете время.

Из хороших книг для обучения могу порекомендовать классический труд Кея Хорстманна и Гари Корнелла "Java 2. Том 1. Основы." (8-е издание). Для себя я охарактеризовал ее, как "продвинутый букварь". Кто-то рекомендует книгу Шилдта "Java. Руководство для начинающих". Лично я считаю, что лучше Хорстманн, т. к. Шилдт менее внятен и не так живо и полно излагает материал. После книги Шилдта я читал Хорстманна с гораздо большим удовольствием и пользой.

Также считаю, что приведенный вами пример лучше оставить в покое (без попыток какой-либо модернизации): неоправданное использование вложенных классов, отсутствие какой-либо системы доступа к данным, нарушение уровней взаимодействия объектов (экземпляр класса (== объект) Digit не должен иметь возможности производить операцию сложения объектов Digit: это функциональность более высокого уровня) и т. п. Слишком много потребуется исправлений - это будет уже другой код smile

Резюмируя: лучше начать с основ и начать правильно.

Удачи  smile 

Это сообщение отредактировал(а) nc30 - 20.11.2010, 11:16
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.0690 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.