Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/41: Рейтинг темы: голосов - 41, средняя оценка - 4.54
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
1

Как поменять местами 2 объекта?

29.11.2013, 15:24. Показов 8011. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вычитал что метод в JAVA не может изменять ссылки и переназначать их на новые объекты. Т.е. следующий метод не поменяет местами 2 объекта:

Java
1
2
3
4
5
6
public static void swap(Employee x, Employee y)
{
Employee temp = x;
x = y;
y = temp;
}
Есть ли возможность в Java поменять местами 2 объекта с помощью метода, если да то как?
Что бы при создании 2-ух объектов можно было поменять их местами?
Чтобы поменять местами one и two в данном примере:
Java
1
2
3
Employee one = new Employee (параметры);
Employee two = new Employee (параметры);
swap(one, two);
Добавлено через 15 минут
Немного уточню вопрос. Как передать объекту one параметры объекта two.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2013, 15:24
Ответы с готовыми решениями:

Как поменять элементы массива местами?
Как отсортировать массив чисел по возрастанию? пересмотрел кучу примеров и все равно ничего не...

Как поменять местами элементы массива объектов?
Как поменять местами элементы массива объектов?

Как поменять местами 1-ю строку и 1 столбец в двухмерном массиве?
int tmp; for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr.length;...

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

7
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
29.11.2013, 15:43 2
Можно вопрос, а зачем менять местами адреса объектов?
В джаве специально отсутствует адресная арифметика. Вам-то она зачем?
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
29.11.2013, 15:54  [ТС] 3
Просто исследую возможности языка Я же еще только знакомлюсь с ним. Ну вот есть у меня 2 объекта:
Java
1
2
Employee one = new Employee (параметры);
Employee two = new Employee (параметры);
Как мне задать проще всего объекту one параметры объекта two, и наоборот?
0
2000 / 1427 / 92
Регистрация: 25.11.2010
Сообщений: 3,611
29.11.2013, 16:27 4
Надо сделать метод, который принимает в качестве параметра такой же объект. А внутри этого метода Вы имеете доступ ко всем полям, в том числе и приватным. Можете поменять значения как Вы делали в коде в первом методе. Только не забудьте проверить точный тип параметра - с дочерними классами могут начаться проблемы.
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
29.11.2013, 22:46  [ТС] 5
А можете пример кода написать?

Добавлено через 1 час 50 минут
Немного еще попрактиковался и составил показательный код, по которому тоже есть пару вопросов.

В методе swap(a, b); я пытаюсь поменять местами 2 экземпляра класса. Как видим сделать это не получилось.
Вопрос: есть ли все таки какой то способ например назначить "Employee a" значения из "Employee b" ?

В методе HappyA(a, b); я уже меняю местами не экземпляры класса, а конкретно поле зарплата 2-ух экземпляров. И сделать это получается. Т.е. получается менять ссылке на объект нельзя назначать новый объект, а переменной можно?

Единственный минус что снижается безопасность т.к. я использую - public double salary;
Вопрос: Можно ли как то это реализовать через public double salary; ?

Заранее очень благодарен за ответ! Пытаюсь разобраться. Код приведен ниже:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class ParamTest
{
   public static void main(String[] args)
   {
//Создадим 2 экземпляра класса:
      Employee a = new Employee("Alice", 70000);
      Employee b = new Employee("Bob", 60000);
//Выводим их зарплаты
      System.out.println("Before: a=" + a.getSalary());
      System.out.println("Before: b=" + b.getSalary());
//Пробуем поменять местами 2 экземпляра класса. Это не сработает...
      swap(a, b);
//Смотрим результат - у каждого осталась своя зарплата
      System.out.println("After: a=" + a.getSalary());
      System.out.println("After: b=" + b.getSalary());
//Пробуем поменять местами не экземпляры класса, а конкретно поле зарплата 2-ух экземпляров
//Правда пришлось сделать поле salary публичным в классе Employee
      HappyA(a, b);
//Видим что зарплаты поменялись
      System.out.println("After: a=" + a.getSalary());
      System.out.println("After: b=" + b.getSalary());
    }
    
    public static void HappyA(Employee x, Employee y)
   {
    double salary1 = x.salary;
      x.salary = y.salary;
      y.salary = salary1;
   }
 
    public static void swap(Employee x, Employee y)
   {
      Employee temp = x;
      x = y;
      y = temp;
   }
}
 
class Employee
{
   public Employee(String n, double s)
   {
      name = n;
      salary = s;
   }
 
   public String getName()
   {
      return name;
   }
 
   public double getSalary()
   {
      return salary;
   }
 
   private String name;
   public double salary;
}
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
29.11.2013, 23:45 6
Читайте лучше Хорстманна дальше, не занимайтесь ерундой
0
5 / 5 / 0
Регистрация: 30.10.2013
Сообщений: 180
30.11.2013, 01:21  [ТС] 7
Ну почему ерундой))) Когда пытаешься разобраться, лучше усваиваешь. Я не люблю оставлять какие то моменты которые не понимаю.... А Хорстман нравится, хорошо пишет для новичков)))
0
2 / 2 / 0
Регистрация: 08.11.2013
Сообщений: 24
03.12.2013, 13:40 8
Тоже новичок и читаю Хорстманна, предположу что в методе swap вы нужно делать клон Employee.
Чтобы вернуть ссылку на изменяемый объект, его нужно сначала клонировать. Клон-это точная копия объекта, расположенная в другом месте памяти...
В качестве эмпирического правила: используйте метод clone(), если вам нужно скопировать изменяемое поле данных.
Java
1
Employee temp = (Employee) x.clone();
0
03.12.2013, 13:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2013, 13:40
Помогаю со студенческими работами здесь

Поменять местами буквы
Нужно, чтобы в текстовом файле буквы менялись местами по следующему принципу: Первая буква менялась...

Поменять значение переменных местами
Объявить две переменные типа byte и float, вывести на экран (сначала byte, затем float), поменять...

Поменять местами диагонали матрицы
Задан масив nxn. Нужно поменять местами диагонали матрици.

Поменять местами буквы в слове
Задача: Дано слово. Поменять местами первую из букв а и последнюю из букв о. Учесть возможность...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru