Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从arraylist中选取一个随机元素并将其从列表中删除_Java - Fatal编程技术网

在Java中从arraylist中选取一个随机元素并将其从列表中删除

在Java中从arraylist中选取一个随机元素并将其从列表中删除,java,Java,我正在开发一个命令行类型的程序,可以让你玩纸牌。我目前有班级卡和班级卡。 在类Deck中,我有一个ArrayList和两个方法——一个创建一个Deck,另一个洗牌。我需要创建一个处理卡片的方法——这意味着一个从ArrayList中选择一个随机元素并将其从ArrayList中删除的方法。当一张牌被发出去时,我相信它不再在ArrayList中了。以下是我的甲板类中的代码: public class Deck { private ArrayList deck = new ArrayList &l

我正在开发一个命令行类型的程序,可以让你玩纸牌。我目前有班级卡班级卡。 在类Deck中,我有一个ArrayList和两个方法——一个创建一个Deck,另一个洗牌。我需要创建一个处理卡片的方法——这意味着一个从ArrayList中选择一个随机元素并将其从ArrayList中删除的方法。当一张牌被发出去时,我相信它不再在ArrayList中了。以下是我的甲板类中的代码:

public class Deck {
   private ArrayList deck = new ArrayList < Card > ();
   private Random randomGenerator;

}

public Deck() {
 for (Suit s: Suit.values())
  for (Numbers n: Numbers.values()) {
   Card c1 = new Card(n, s);
   deck.add(c1);
   System.out.println(deck);
  }
}
private void printAll() {}
public void shuffle() {
 Collections.shuffle(deck);
}
有人能给我提供一些关于这个方法的指导吗?
请和谢谢你

你可以用这样的东西

Random rand=new Random()

我认为这个链接可能有用

你可以用这样的东西

Random rand=new Random()

我认为这个链接可能有用

实际上,洗牌牌的全部目的是让你可以从牌堆顶部进行交易,每次都可以随机获得牌。因此,如果
Deck
类具有:

private final List<Card> cards = new ArrayList<>();

您还应该有一个
isEmpty
方法,以便调用者在调用
deal
之前可以确保卡片组中还有卡片。这比捕获
索引AutofBoundsException

更好的编码实践实际上,洗牌的全部目的是让您可以从牌组顶部进行交易,每次都可以随机获得牌。因此,如果
Deck
类具有:

private final List<Card> cards = new ArrayList<>();

您还应该有一个
isEmpty
方法,以便调用者在调用
deal
之前可以确保卡片组中还有卡片。这比捕获
索引autofBoundsException

deck.remove(ThreadLocalRandom.current().nextInt(deck.size())更好的编码实践
我认为更好的办法是使用
Collections.shuffle()
然后从顶部或底部一次发一张牌。一个很好的起点是查看ArrayListI的javadocs,我很抱歉,我重新格式化了代码sorry@CatV不是真的。同样基于此代码,您的类
Deck
在花括号
Deck.remove(ThreadLocalRandom.current().nextInt(Deck.size())的定位方面不正确
我认为更好的办法是使用
Collections.shuffle()
然后从顶部或底部一次发一张牌。一个很好的起点是查看ArrayListI的javadocs,我很抱歉,我重新格式化了代码sorry@CatV不是真的。同样基于此代码,您的类
Deck
在curly的位置上是不正确的braces@CatV-还要注意正确的声明:
List cards=new ArrayList()。。。卡片是一个
列表
,所选择的列表实现是一个
ArrayList
——但是代码不应该关心这个选择,所以您只需声明
列表
@CatV即可——还要注意正确的声明:
列表卡片=新的ArrayList()。。。卡片是一个
列表
,列表的所选实现是一个
数组列表
——但是代码不应该关心这个选择,所以您只需声明
列表
,这不会移除卡片,因此同一张卡片可以被多次处理。请参阅您链接的文章中的2.4“选择不重复的随机项目”。这不会移除该卡,因此同一张卡可以多次发牌。请参阅链接文章中的2.4“选择不重复的随机项目”。
private final List<Card> cards = new ArrayList<>();
public Card deal() {
    return cards.remove(0);
}