Java 使用同一类的方法修改数组

Java 使用同一类的方法修改数组,java,oop,Java,Oop,我有一个甲板 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

我有一个甲板

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());    
        }   
    }
}
我的问题是Shift方法实际上并没有改变deck数组。 我错过了什么?我真的搞不懂

这是我的主类,我尝试用int(比如100或52)调用该方法,但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();

    }
}

问题是,生成要交换的卡的随机索引的行在循环外,所以每次交换相同的2张卡时。 尝试:

公共无效移位(int次){
Random randomGenerator=新的Random();
用于(int计数器=0;计数器<次;计数器++){
int card1=随机生成器.nextInt(52);
int card2=随机生成器.nextInt(52);
卡温度=新卡(空,空);
临时=卡片[card1];
卡片[card1]=卡片[card2];
卡片[card2]=临时工;
}
}

备注:字段卡是静态的有什么原因吗?

请提供一个-您没有显示如何调用该方法,或者没有任何指示表明它实际上不起作用。顺便说一句,您不需要在“Card temp=new Card(null,null)”行中实例化
卡。您只需在下一行中分配一个引用。我正在调用主类中的方法,提供一个int,表示我希望切换完成的次数,即100,如果您不必使用自己的洗牌算法,则hm:
Collections.shuffle(Arrays.asList(cards))我不需要,但是在使用内置函数之前,我想实现我自己的算法来检查我的知识,因为我学习java已经一周了,我没有意识到它是在循环之外,我非常累!谢谢:)事实上不要,这是一次尝试。。。我认为我缺少了一些关于数组、方法等的Java规则
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;
    }
}