Malaja
|
|
« : 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
|
|
« Ответ #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++ »
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #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
|
|
« Ответ #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++ »
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #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 что-то в них записала, не читая. По-моему, логичнее такие параметры перенести в возвращаемое значение, что я и написал в первом примере.
|
|
|
Записан
|
|
|
|
Malaja
|
|
« Ответ #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
|
|
« Ответ #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
|
|
« Ответ #9 : 11-05-2004 14:03 » |
|
Malaja, Пожалуйста . wozwrashaemoe znachenie ispolzowat kak ukazatel na uspeshnoe ili neuspeshnoe zawershenie funkzii В Java для этого есть исключения. Или можно использовать null как признак неуспешного завершения операции.
|
|
|
Записан
|
|
|
|
|