我想洗牌在Java中的二维对象数组。我认为Collections.shuffle可以做到这一点,但它看起来只是将每行中的对象进行混洗,而没有将行混合在一起,我希望它们能够做到。任何内置的方法或容易实现的方法,可以为我洗牌二维数组?该阵列是cards[13][4]
。在Java中洗牌二维数组
1
A
回答
4
IMO,有(非常接近)零机会找到一个预先存在的库类/方法做这种事情。这是waaay太专业。
但这没关系。这是一个Java 101编码问题:-)我采取的方法是将二维数组元素复制到一维数组中,将它们进行混洗,然后将它们复制回二维数组中。
6
它看起来像你想洗牌一副扑克牌。
在现实世界的游戏中,我们先洗牌,然后分发牌给玩家。你尝试改变顺序:你想分发一个排序的牌组给玩家,并要求他们交换牌,直到所有牌洗牌;-)
作为Stephen C建议:从玩家收集卡,洗牌并再次分发。
4
既然你有一副扑克牌,你应该把扑克牌放在一个列表中(代表扑克牌),然后洗牌。
我是否还需要解决洗牌二维数组的一般问题,我可能会做二维数组的列表视图,并通过洗牌,就像这样:
import java.util.AbstractList;
public class TwoDimensionalArrayViewList extends AbstractList implements RandomAccess {
private Object[][] array;
public TwoDimensionalArrayViewList(Object[][] array) {
this.array = array;
}
@Override
public Object get(int index) {
int row = rowForIndex(index);
int column = columnForIndex(index);
return array[row][column];
}
private int columnForIndex(int index) {
return index % array[0].length;
}
private int rowForIndex(int index) {
return index/array[0].length;
}
@Override
public Object set(int index, Object element) {
Object previous = get(index);
int row = rowForIndex(index);
int column = columnForIndex(index);
array[row][column] = element;
return previous;
}
@Override
public int size() {
return array.length*array[0].length;
}
}
import org.junit.Test;
import java.util.Collections;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class TwoDimensionalArrayViewListTest {
@Test
public void test() {
Integer[][] array = { {1, 2, 3}, {4, 5, 6} } ;
List list = new TwoDimensionalArrayViewList(array);
assertEquals(1, list.get(0));
assertEquals(2, list.get(1));
assertEquals(3, list.get(2));
assertEquals(4, list.get(3));
assertEquals(5, list.get(4));
assertEquals(6, list.get(5));
Collections.shuffle(list);
}
}
+1
千万不要用方阵测试!另外,实现`java.util.RandomAccess`可能是一个好主意。 – 2010-12-22 07:38:25
0
另一种选择是将数据存储在单个数组中,并基于i,j值计算此数组中的索引。洗牌数组现在是一个教科书问题。
这可能工作与否,取决于你打算如何传递各种颜色(数组)。
Card[] cards = new Card[52];
...
getCard(int i, int j){
// Perhaps check ranges for i,j first.
return cards[j+i*13]
}
当然,你需要把所有这一切在自己的班级,也许Deck
。
相关问题
- 1. 洗牌二维数组中的perl
- 2. 如何在java中洗牌二维数组
- 3. Java - 在二维数组中插入混洗列表
- 4. 洗牌在Objective-C数组
- 5. 二维数组java
- 6. java中的二维数组
- 7. 在Java中洗牌一套
- 8. java:卡洗牌,
- 9. 数组在android中不洗牌
- 10. 一维数组到二维数组在java中
- 11. 在Java中打印二维数组
- 12. 在Java中的二维数组郎格
- 13. 洗牌数组元素
- 14. 随机洗牌数组
- 15. 在java中洗牌JSON数组的有效方法?
- 16. Java二维数组问题
- 17. Java;二维数组长度
- 18. Java二维字符数组
- 19. java二维数组算术
- 20. Java二维数组比较
- 21. 二维数组问题Java
- 22. 在另一个二维数组中放置一个二维数组java
- 23. Java数组错误(二维数组)
- 24. 使用mysql从数组中洗牌
- 25. 二维网格大于二维数组中的Java
- 26. ArrayIndexOutOfBoundsException迭代Java中的二维数组
- 27. 比较二维数组中的行java
- 28. 复制Java中的二维数组
- 29. 如何在Java中洗牌FilteredList?
- 30. 如何在Java中洗牌甲板?
当然。你必须为任意原始类型*和* rank的数组实现`List <>`。许多样板。 – 2010-12-22 07:06:27