java - 使用同一个类的方法修改数组

标签 java oop

我有类(class)甲板

import java.util.Random;
public class Deck implements DeckActions{
    private static Card[] cards=new Card[52];
    public Deck () {
        int i=0;                                    
        for (Suit suit : Suit.values()){
            for (Rank rank : Rank.values()){
                cards[i++]=new Card(rank,suit); 
            }
        }
    }

    public Card draw() {                                 
        return cards[0];
    }

    public void shift(int times) {                          
        Random randomGenerator=new Random();
        int card1=randomGenerator.nextInt(52);
        int card2=randomGenerator.nextInt(52);

        for (int counter=0;counter < times; counter++){

        Card temp=new Card(null,null);
        temp=cards[card1];
        cards[card1]=cards[card2];
        cards[card2]=temp;
        }
    }
    public void show() {                            
        for (int i=0;i<cards.length;i++){
            System.out.println(cards[i].toString());    
        }   
    }
}

实现接口(interface)

public interface DeckActions {

    public Card draw();                 
    public void shift(int times);       
    public void show();                 

}

我遇到的问题是 Shift 方法实际上并没有改变牌组数组。 我缺少什么?我实在想不通。

这是我的主类,我尝试使用像 100 或 52 这样的 int 来调用该方法,但 show 总是显示相同的数组

public class TestCard {

    public static void main (String [] args) {
        Deck deck=new Deck();
            deck.show();
        deck.shift(52);
        System.out.println("Shifted");
        deck.show();

    }
}

最佳答案

问题是生成要交换的卡的随机索引的行是外部循环,因此您始终交换相同的两张卡。 尝试:

 public void shift(int times) {                          
    Random randomGenerator=new Random();

    for (int counter=0;counter < times; counter++){

       int card1=randomGenerator.nextInt(52);
       int card2=randomGenerator.nextInt(52);

       Card temp=new Card(null,null);
       temp=cards[card1];
       cards[card1]=cards[card2];
       cards[card2]=temp;
    }
}

P.S:有什么理由让字段卡保持静态吗?

关于java - 使用同一个类的方法修改数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43686276/

相关文章:

java - 在 Eclipse 中调试 Android 代码的最佳方法是什么?

java - 在 stateChanged() 中调用函数

java - 适用于Google Action的Java Servlet无法正常工作,日志显示 list 错误

c# - 何时调用 base.method() 以及 base.method() 中应包含哪些代码?

java - 需要澄清 - 设计模式

javascript - 如何创建基于以 "_"开头的属性名称将所有类属性设置为不可枚举的 Typescript 装饰器?

java - 将 PFX 静默安装到 Android 系统受信任的 CA 用户 keystore 中

java - 继承问题低层设计方法

.net - 是否可以在运行时将接口(interface)分配给对象?

java - 如何将多个字段分配为实体的主键(使用 JPA)