java - ArrayList 元素交换不是永久的

标签 java arraylist

我有一个扑克牌数组列表。

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/

相关文章:

java - 将 slf4j 与 log4j 结合使用。在 tomcat 中部署时未在文件中创建日志

java - Spring mvc-从 PostMapping URL 返回 JSON(Froala 编辑器)

java - 找出字符串的排列总数

java - 迭代存储在 ArrayList 中的 HashMap 中的值

android - 带有额外变量的 gson 数组反序列化

java - 创建两个相同的 bean 依赖不同

java - Antunit测试中回声不显示

java - 给定最终 block 未正确填充的异常

java - ArrayList仅存储最后读取的值

java - 为什么 ArrayList 没有可变参数构造函数?