我有一个扑克牌数组列表。
private ArrayList<VisibleCard> m_vecCards;
它有一个私有(private)范围,但是通过以下方式访问其成员时:
public VisibleCard getCard(int n) {
return this.m_vecCards.get(n);
}
我发现元素未通过冒泡排序算法排序:
public void sortCards() {
int swapCounter, nIndex;
int upperBound = this.m_vecCards.size() - 1;
while(true) {
swapCounter = 0;
for ( nIndex = 0; nIndex < upperBound; nIndex++ ) {
if ( this.m_vecCards.get(nIndex).getNumericVal() > this.m_vecCards.get(nIndex + 1).getNumericVal() ) {
Collections.swap(this.m_vecCards, nIndex, nIndex + 1);
swapCounter++;
}
}
if ( swapCounter == 0 ) {
for ( nIndex = 0; nIndex < 7; nIndex++ ) {
Log.d("order", ""+ this.m_vecCards.get(nIndex).getNumericVal());
}
return;
}
}
}
我有一个日志函数,可以用来测试数字以确保我的数组已排序,并且数组正在排序,但结果不是永久的。
12-18 06:51:08.077: D/order(3636): 2
12-18 06:51:08.077: D/order(3636): 4
12-18 06:51:08.077: D/order(3636): 5
12-18 06:51:08.077: D/order(3636): 8
12-18 06:51:08.077: D/order(3636): 8
12-18 06:51:08.077: D/order(3636): 9
12-18 06:51:08.077: D/order(3636): 9
12-18 06:51:08.087: D/order(3636): 1
12-18 06:51:08.087: D/order(3636): 5
12-18 06:51:08.087: D/order(3636): 6
12-18 06:51:08.087: D/order(3636): 8
12-18 06:51:08.087: D/order(3636): 12
12-18 06:51:08.087: D/order(3636): 12
12-18 06:51:08.087: D/order(3636): 13
12-18 06:51:08.087: D/order(3636): 1
12-18 06:51:08.087: D/order(3636): 1
12-18 06:51:08.087: D/order(3636): 2
12-18 06:51:08.087: D/order(3636): 3
12-18 06:51:08.087: D/order(3636): 3
12-18 06:51:08.087: D/order(3636): 10
12-18 06:51:08.087: D/order(3636): 10
12-18 06:51:08.087: D/order(3636): 4
12-18 06:51:08.097: D/order(3636): 6
12-18 06:51:08.097: D/order(3636): 6
12-18 06:51:08.097: D/order(3636): 9
12-18 06:51:08.097: D/order(3636): 10
12-18 06:51:08.097: D/order(3636): 11
12-18 06:51:08.097: D/order(3636): 13
本质上,ArrayList 中的元素并没有像我希望的那样“永久”交换。我无法理解这种现象,因为我认为代码或日志调试没有任何问题。
public void addCard(VisibleCard vc) {
if ( this.m_humanAgent ) {
vc.setPosition(-20, (this.m_vecCards.size() * 85) + 100);
vc.rotate(1.57079633);
vc.setup();
}
this.m_vecCards.add(vc);
if ( this.m_vecCards.size() == 7 ) {
this.sortCards();
}
}
我为每个玩家添加了总共七张牌,并且在数组中存在七个元素后,我调用 sortCards() 方法,但输出牌后,它们没有按应有的顺序出现。
我像这样渲染输出:
for ( int n = 0; n < 7; n++ ) {
this.m_flushRummy.getPlayer(0).getCard(n).draw(gl, m_bmTextureIds[0]);
}
最佳答案
当然,它不会以正确的顺序以图形方式显示!这是根本原因:
vc.setPosition(-20, (this.m_vecCards.size() * 85) + 100);
在对卡片进行排序之前,您先设置卡片的图形位置:) 然后它们会按正确的顺序绘制,但位置不正确。
关于java - ArrayList 元素交换不是永久的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20657580/