我有类(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/