powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Обмен объектов (метод swap)
6 сообщений из 31, страница 2 из 2
Обмен объектов (метод swap)
    #37627024
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amigaboy,

та и по бістродействию сравни.
что дешевле, копировть всю строку - как ті вздумал, или ссілку на нее?
...
Рейтинг: 0 / 0
Обмен объектов (метод swap)
    #37627075
Большой Синий Кит
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Miha_S7amigaboy,

вот так работает
+

Код: 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.
import java.lang.reflect.*;

public class Test {

    private void swap(String a, String b) {
        try {
            Field value = String.class.getDeclaredField("value");
            
            value.setAccessible(true);    // this should be forbidden!!

            char[] temp = (char[])value.get(a);
            value.set(a, value.get(b));
            value.set(b, temp);           // Aaargh, please forgive me
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        
        Test inst = new Test();
        
        String s1 = "aaa";
        String s2 = "bbb";
        
        System.out.println("s1 = " + s1);
        System.out.println("s2 = " + s2);
        
        inst.swap(s1,s2);
        
        System.out.println("s1 = " + s1);
        System.out.println("s2 = " + s2);
    }
}



но зачем болт забивать молотком? Мне кажется setAccessible() нужно использовать в крайних случаях, чтобы реализовать какие-нибудь замысловатые "доступы", типа friendly класс. А в остальном - это больше на хакерство какое-то смахивает, которое может привести к непредсказуемым последствиям. В этом плане, конечно, код нифига не безопасный.

Да не работает так нифига Я же говорю, вы забываете об offset и count

Попробуйте

Код: java
1.
2.
3.
4.
5.
6.
7.
Test inst = new Test();
        
        String s1 = "aaa";
        String s2 = "bbb bbb";
        
        System.out.println("s1 = " + s1);
        System.out.println("s2 = " + s2);



Вы работать с таким стрингом не сможете нормально.
...
Рейтинг: 0 / 0
Обмен объектов (метод swap)
    #37627110
Miha_S7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большой Синий Кит,

ага, наглядная иллюстрация тех самых непредсказуемых последствий :-)
...
Рейтинг: 0 / 0
Обмен объектов (метод swap)
    #37627935
amigaboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В продолжение темы.

Сортировка:
Код: 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.
public class BubbleSort<E extends Comparable> {
	private E[] objArray; 

	.........

	public void sort() {
		if (objArray.length > 0) {
			for (int i = 0; i < objArray.length; i++)
				for (int j = i; j < objArray.length - 1; j++) {
					E o1 = objArray[j];
					E o2 = objArray[j + 1];
					
					if (o1.compareTo(o2) > 0) {
						RefObject<E> r1 = new RefObject<E>(objArray[j]);
						RefObject<E> r2 = new RefObject<E>(objArray[j + 1]);
						RefObject<E> r3 = new RefObject<E>(objArray[j]);
						
						r1.setArgvalue(r2.getArgvalue());
						r2.setArgvalue(r3.getArgvalue());
					}
				}
		}
	}
}


RefObject:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public final class RefObject<T>
{
    public T argvalue;
    
    public RefObject(T refarg) {
        argvalue = refarg;
    }

	public T getArgvalue() {
		return argvalue;
	}

	public void setArgvalue(T argvalue) {
		this.argvalue = argvalue;
	}
}



Не сортирует.

Все не правильно?
...
Рейтинг: 0 / 0
Обмен объектов (метод swap)
    #37627971
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
amigaboyНе сортирует.

Все не правильно?
а че вы не последовали моему совету:

ZyK_BotaNZyK_BotaNпропущено...

че не для джавы. просто нах тебе ф-я swap?или сделай свап по другому.
вместо строк - передавай индексі массива, чем не решение?

у тебя там нет обмена строк между элементами массива, а есть бомен - между RefObject-и.
что бессмісленно.

вікиньте єти рефОбжекті, и реализуйте нормальній обмен:

t = objArray[j];
objArray[j] = objArray[j+1];
objArray[j+1] = t;
...
Рейтинг: 0 / 0
Обмен объектов (метод swap)
    #37628001
amigaboy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZyK_BotaN,

да, замечательно работает. Спасибо.

Надо выбивать из головы эту указательную Сишную дурь.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Обмен объектов (метод swap)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]