0 / 0 / 0
Регистрация: 15.07.2012
Сообщений: 8
|
||||||
1 | ||||||
Функция swap для обмена данных между переменными14.11.2012, 13:05. Показов 44664. Ответов 14
Метки нет (Все метки)
Всем здравствуйте, начал писать на java недавно, для удобства решил написать функцию, чтоб меня значения между двумя переменными в частности между двумя int a,b; и двумя строками String a,b;
Буду очень благодарен, если поможете с моей проблемой. P.S. Заранее спасибо.
0
|
14.11.2012, 13:05 | |
Ответы с готовыми решениями:
14
Функция swap перестановки значений двух переменных для данных разных типов. Используйте template Существует ли в Лазарусе процедура Swap для обмена объектов местами? Функция interchange(), которая выполняет обмен значений между двумя переменными Функция, которая выполняет обмен значений между двумя целочисленными переменными |
Музыка нас Связала
232 / 232 / 52
Регистрация: 26.03.2008
Сообщений: 616
|
||||||
14.11.2012, 13:41 | 2 | |||||
Проблема здесь в том, что формальные параметры и реальные переменные имеют одно и тоже название. Переменуйте их, и всё будет работать. И да, "a и b" должны быть доступны для статического метода.
Код
a = String A; b = String B a = String B; b = String A
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
|
14.11.2012, 14:19 | 3 |
Проблема здесь в том, что ссылки на объекты в ява передаются по значению а не по ссылке.
Поэтому присвоение параметру функции значения не приведет к изменению объекта вне функции. Что ваш пример и показал. В данном случае можно поместить переменные в массив или содавать обертки для строк (интов) и передавать их.
0
|
0 / 0 / 0
Регистрация: 15.07.2012
Сообщений: 8
|
|
14.11.2012, 17:05 [ТС] | 4 |
Спасибо вам конечно)) Но если честно я не совсем понял все же как это сделать (вот такой вот я глупый).
И еще проблема в том что строки мне не нужно запихивать в массив(
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
|||||||||||
14.11.2012, 17:31 | 5 | ||||||||||
Общий смысл в том, что нельзя заменить переданный объект, только его состояние. Т.е. здесь:
Однако, можно поменять внутреннее состояние объекта, например, есть класс class StringWrapper { String a; }, тогда:
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
||||||
14.11.2012, 21:20 | 7 | |||||
Вот, кстати, нет, вернее не только эта.
Если сделать:
Так что, тема для изучения, где была основная ошибка, это передача параметров по ссылке/значению.
0
|
14.11.2012, 22:47 | 8 | ||||||||||
а вот и нет
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
|
14.11.2012, 23:50 | 9 |
И к чему вообще эта хрень с интерфейсом и дженериками, если по сути это тот же простой StringWrapper из моего примера?
Если вы внимательно посмотрите на пример тс, вы поймете что проблема не в мутабельности строк, а в том, что тс предполагал поменять ссылки объектов, присвоив один другому внутри метода. А еще мне очень интересно, что мне там показалось, потрудитесь объяснить.
0
|
15.11.2012, 07:24 | 10 |
Я уже потрудился - ваше w = new StringWrapper(); это создание нового объекта и присвоение переменной его адреса, а не обмен как вам кажется.
Вопрос ТС я внимательно смотрел и в первый раз, мой ответ был ВАМ а не ТС, чтобы ВЫ разобрались что такое мутабельный класс прежде чем давать советы. То как вас научили в с++ обмениваться ссылками на объекты к мутабельности в ява не имеет ни малейшего отношения, чего вы явно не понимате так как создаёте новый объект и присваиваете новую ссылку думая что работаете с мутабельным объектом, потому и пример мой основан на вашем мутабельном стринге, но вы конечно же не озаботились запустить и посмотреть результат того что ваш мутабельный обьект в методе прекрасно изменился
0
|
15.11.2012, 07:29 | 11 |
написал mutagen, и привел пример как меняется состояние. Вы же хотели противопоставить пример, именно тому что вы цитировали, или нет?
Если да - то пример плох, он как раз показывает, что вы меняете состояние MutableString. Если нет - то к чему спор, не понятно.
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
|
15.11.2012, 12:53 | 13 |
Ну я последний раз повторю, что проблема у автора с присвоением ссылок. А мутаген считает что дело в немутабельности строк, хотя в примере тс мутабельности-немутабельности и близко нет.
Решается вопрос, да, сменой состояния обертки, что я продемонстрировал в своем первом примере. Без интерфейсов и дженериков ))) И да, на плюсах я никогда не писал, кому-то стоит делать поменьше предположений.
0
|
15.11.2012, 14:17 | 14 | |||||
забираю назад предположение про с++
у меня акцент был не на женериках и интерфейсах (это так просто захотелось чего-то вычурного, надоел простой код на форуме), а на том что внутри метода change Вы сделали
ну и под занавес, я уже понял что Вы разбираетесь в Мутабельности не хуже меня, поэтому вполне могу забрать свои слова стартанувшие этот спор назад, надеюсь Вы удовлетворены
0
|
20 / 20 / 2
Регистрация: 01.11.2012
Сообщений: 66
|
|
15.11.2012, 15:35 | 15 |
Ну я, честно говоря, не вижу разницы, между присвоением параметру функции нового объекта или существующего (обмен). Суть остается та же, поменять ссылку объекта нельзя.
Ну и мне казалось очевидным, что w = new Object() - это попытка замены ссылки в примере. А интерфейсы меня зацепили, конечно Сейчас все кому не лень, ругают яву за перегруженность конструкций, фабрики фабрик и прочую "аппаратуру". Я не против, если это все юзается по мере необходимости. Но когда для обмена значений переменных создаются интерфейс, подклассы - меня это таки коробит. Ну да это действительно к теме не относится.
0
|
15.11.2012, 15:35 | |
15.11.2012, 15:35 | |
Помогаю со студенческими работами здесь
15
Реализация метода обмена значениями (Swap) Перенос данных между документами без использования буфера обмена Вывод формы для ручного выбора между двумя переменными Функция обмена для обменника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |