Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Parametri funkzii  (Прочитано 13097 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 11-05-2004 09:11 » 

Ljudi, help me ! Я шокирован!

Ja nikak ne pojmu, kak w jave peredawat w funkziju parametri takim obrazom , chtobi potom in znachenija mogno bilo bi ispolzowat w wiziwajushej funkzii. W c++ eto delalos s pomoshju milih serdzu pointerow ili reference. Prostoj primer na C++:

void func_1()
{
     int nRowCount = -1;
     char* pArr = NULL;

     func_2(nRowCount , pArr );

     if (strcmp(pArr, "Hallo") == 0)
          // chto-to delaem dalshe, ishodja iz poluchennogo
         //s pomoshju func_2 znachenija

     if (pArr )
         delete []pArr ;
}

void func_2(int& nRowCount , char*& pArr )
{
    // kakim-to obrazom wichisljaem kolichestwo elementow, naprimer 10
   nRowCount =10;

   pArr = new char[nRowCount];

  strcpy(pArr, "Hallo");
}

A kak eto sdelat na jave - ne pojmu. Peredachu tipa String& str  ona ne ponimaet, a bez & proishodit peredacha ByVal. Anal. s Integer&.
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 11-05-2004 09:43 » 

Надо передавать объекты.  В Java все объекты передаются по ссылке, примитивные типы по значению.

Надо написать класс с двумя полями, число и строка.  В примере я для простоты делаю поля public и напрямую обращаюсь к ним, но это не совсем гут.
Код:
class IntegerStringPair{
    public int rowCount;
    public String string;
}

class Main
{
    public IntegerStringPair func_2()
    {
        IntegerStringPair result = new IntegerStringPair();
        result.rowCount = 10;
        result.string = "Hallo"; // или new String("Hallo")
        return result;
    }

    public void func_1()
    {
        IntegerStringPair pair = func_2();

        if (pair.string.equals("Hallo"))
       {
            // Что-то делаем
       }

       // Мусор Java сама подберёт
    }
}
« Последнее редактирование: 25-11-2007 20:56 от Алексей1153++ » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #2 : 11-05-2004 10:13 » 

npak,

spasibo tebe za primer. No mogno sprosit : String - eto wed toge klass, t.e. objekt, znachit, on peredaetsja po ssilke. Pochemu ge togda ja ne mogu s nim rabotat, kak w c++? Ili w jave eto w prinzipe ne rabotaet? T.e. nelzja sdelat funkziju func_2 void, a neobhodimoe peredawat ne s pomoshju return, a kak parametri funkzii (w etom sluchae ja ekonomlju wremja, mesto i nerwi na sozdanie objektow, kotorie mne potom ne budut nugni)
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 11-05-2004 11:27 » 

String -- не изменяемый объект.  Если ты его создал, то изменить уже не можешь.  То же самое с Integer.  У объектов этих классов нет методов для изменения внутреннего состояния.

Если ты напишешь
Код:
 void func_2(Integer i, String s)
то получится аналогично C++
Код:
void func_2(const int & i, const char * & s)

В Java есть изменяемая строка -- java.lang.StringBuffer.  Она позволяет произвольно модиф цировать внутреность.  

Код:
class Main {
    public void f_2(StringBuffer strBuf) {
        strBuf.replace(0, strBuf.length()-1, "Hallo");
    }
    public void f_1() {
        StringBuffer str = new StringBuffer();

        f_2(str);
        if (str.toString().equals("Hallo"))
        {
            // Что-то делаем
        }
}

Изменяемого числа, насколько я знаю, в Java нет, но можно написать самодельную обёртку
Код:
class MyInteger {
    private int value;
    public MyInteger() { value = 0; }
    public MyInteger(int v) { value = v; }
    public int getValue() { return value; }
    public void setValue(int v) { value = v; }
}
Правда, перегрузки операторов в Java нет, поэтому надо добавлять свои методы для арифметики.
« Последнее редактирование: 25-11-2007 20:58 от Алексей1153++ » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #4 : 11-05-2004 12:26 » 

npak,

spasibochki tebe za objasnenija.
No u menja opjat wopros (i wse o tom ge  :oops: ):

IntegerStringPair - objekt, znachit, on peredaetsja po ssilke, znachit, ego mogno ispolzowat kak parametr, peredajushij nowie znachenija w wiziwajushuju funkziju. Takim obrazom, mi oblegchiw gizn func_2, sdelaw ee void (uberem zaodno eshe i lishnjuju stroku s return  Отлично )

Ili ja opjat neprawa?
Zaranee izwinjajus za idiotskij wopros, prosto awtomatom tjanet ispolzowat starie udobstwa iz c++ i ne muchitjsja  Показываю язык
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #5 : 11-05-2004 12:28 » 

npak,

spasibochki tebe za objasnenija.
No u menja opjat wopros (i wse o tom ge  :oops: ):

IntegerStringPair - objekt, znachit, on peredaetsja po ssilke, znachit, ego mogno ispolzowat kak parametr, peredajushij nowie znachenija w wiziwajushuju funkziju. Takim obrazom, mi oblegchiw gizn func_2, sdelaw ee void (uberem zaodno eshe i lishnjuju stroku s return  Отлично )

Ili ja opjat neprawa?
Zaranee izwinjajus za idiotskij wopros, prosto awtomatom tjanet ispolzowat starie udobstwa iz c++ i ne muchitjsja  Показываю язык
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 11-05-2004 12:43 » 

Цитата
IntegerStringPair - objekt, znachit, on peredaetsja po ssilke, znachit, ego mogno ispolzowat kak parametr, peredajushij nowie znachenija w wiziwajushuju funkziju


Да, можно сделать так, но ...

Насколько я понимаю, ты передаёшь в C++ ссылки на int и char * для того, чтобы func_2 что-то в них записала, не читая.  По-моему, логичнее такие параметры перенести в возвращаемое значение, что я и написал в первом примере.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #7 : 11-05-2004 13:32 » 

npak,

spasibochki za otwet! I za wse razjasnenija toge!
Prosto ja priwikla w c++ wse parametrami gonjat, a wozwrashaemoe znachenie ispolzowat kak ukazatel na uspeshnoe ili neuspeshnoe zawershenie funkzii (za iskljucheniem samih prostih tipa get/set, w kotorih nichego ne proishodit).
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #8 : 11-05-2004 13:34 » 

npak,

spasibochki za otwet! I za wse razjasnenija toge!
Prosto ja priwikla w c++ wse parametrami gonjat, a wozwrashaemoe znachenie ispolzowat kak ukazatel na uspeshnoe ili neuspeshnoe zawershenie funkzii (za iskljucheniem samih prostih tipa get/set, w kotorih nichego ne proishodit).
Записан

холоднокровней, Маня, Ви не на работе
---------------------------------------
четкое определение сущности бытия:
- А мы в прошлом или в будущем?- спросила Алиса.
- Мы в жопе, - ответил кролик.
- А "жопа" - это настоящее? - спросила Алиса.
- А "жопа" - это у нас символ вечности.
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #9 : 11-05-2004 14:03 » new

Malaja,
Пожалуйста Отлично.
Цитата
wozwrashaemoe znachenie ispolzowat kak ukazatel na uspeshnoe ili neuspeshnoe zawershenie funkzii

В Java для этого есть исключения.  Или можно использовать null как признак неуспешного завершения операции.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines