Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Перемешать <ArrayList> обьектов / 8 сообщений из 8, страница 1 из 1
14.09.2012, 04:38:00
    #37956952
whizzzkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
Имеется функция Collections.shuffle которая без проблем мешает примитивы в массиве <ArrayList>, но почему нет возможности её использовать чтобы перемешать ссылки на объекты в том же <ArrayList>? как можно выкрутится из такой ситуации?
...
Рейтинг: 0 / 0
14.09.2012, 06:13:38
    #37956966
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
whizzzkeyпримитивы в массиве <ArrayList> ArrayList - это не массив. Примитивы в generic'ах недопустимы.
whizzzkeyно почему нет возможности её использовать чтобы перемешать ссылки на объекты в том же <ArrayList>?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
// пример
List<Object> list = new ArrayList<Object>(Arrays.<Object>asList(1, 2.0F, 3.0, '4', "5", 6L));
Collections.shuffle(list);
for (Object i: list)
    System.out.print(i + ";");
	
System.out.println();
// Вывод:
// 3.0;1;5;6;2.0;4;
// Все ОК
...
Рейтинг: 0 / 0
14.09.2012, 06:16:54
    #37956968
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
UsmanПримитивы в generic'ах недопустимы.whizzzkey, http://www.codenet.ru/webmast/java/autoboxing.php
...
Рейтинг: 0 / 0
14.09.2012, 10:19:10
    #37957145
whizzzkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
Ребята, но неужто вы не поняли что я имею ввиду? абстрагируемся от упаковки и точного определения <ArrayList>
так вот имеем - ArrayList <Integer> - collections.shuffle работает
ArrayList <Object> - collections.shuffle НЕ работает
придумал вот такую хрень:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
//Гдето наверху обьявлен gameObjects
ArrayList<GameObject> gameObjects = new ArrayList<GameObject>();
//Перемешка
public void shuffle() {
		int n = gameObjects.size();
		int randomPos;
		GameObject temp;
		GameObject randomObj;
		Random r = new Random();
		for (int i = 0; i < n; i++) {
			 randomPos = i + r.nextInt(n - i);
                         temp = gameObjects.get(i);
                         randomObj = gameObjects.get(randomPos);
                         gameObjects.set(i, randomObj);
                         //randomObj впринципе нафиг не нужен, можно брать напрямую 
                         gameObjects.set(randomPos,temp);
		}
	}
...
Рейтинг: 0 / 0
14.09.2012, 10:28:32
    #37957176
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
Можно TestCase посмотреть где shuffle не работает?
...
Рейтинг: 0 / 0
14.09.2012, 10:38:47
    #37957193
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
whizzzkeyArrayList <Object> - collections.shuffle НЕ работает
Код: 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.
package ru.sql.java.whizzzkey;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

import static ru.sql.java.whizzzkey.Shuffler.GameObject.c;

public class Shuffler {
    static class GameObject {
        int order;

        @Override
        public String toString() {
            return "GameObject[" + order + "]";
        }

        static GameObject c(int order) {
            GameObject g = new GameObject();
            g.order = order;
            return g;
        }
    }

    public static void main(String[] args) {
        ArrayList<GameObject> gameObjects = new ArrayList<GameObject>();
        gameObjects.addAll(Arrays.asList(c(0), c(1), c(2), c(3), c(4), c(5)));

        for (GameObject g : gameObjects) {
            System.out.print(g + "; ");
        }
        System.out.println();

        Collections.shuffle(gameObjects);

        for (GameObject g : gameObjects) {
            System.out.print(g + "; ");
        }
        System.out.println();
    }
}



чо не так-то?

Код: plaintext
1.
GameObject[0]; GameObject[1]; GameObject[2]; GameObject[3]; GameObject[4]; GameObject[5]; 
GameObject[2]; GameObject[4]; GameObject[3]; GameObject[5]; GameObject[1]; GameObject[0];
...
Рейтинг: 0 / 0
14.09.2012, 12:57:32
    #37957578
olexande
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
А что мешает рандом вызвать и по его значению использовать (по необходимости, может дубли пропускать)?
...
Рейтинг: 0 / 0
15.09.2012, 07:48:57
    #37958694
whizzzkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемешать <ArrayList> обьектов
Код: java
1.
package ru.sql.java.whizzzkey;



=))

авторчо не так-то?

Да всё так, я разобрался когда дебажить стал, все нормально шуфлит, у меня картинки на канве не перемешиваются и первое о чем я подумал - чето не то с шуффлом
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Перемешать <ArrayList> обьектов / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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