[英]UnsupportedOperationsException while attempting to shuffle an ArrayList without built-in class
正如我所说,我正在尝试创建一个 ArrayList,然后在洗牌器中写入,我使用的是 Fisher-Yates,作业说没有内置插件。 但是,每次我运行它时,我都会得到 UnsupportedOperationsException。 我试图阅读它给出的行以及谷歌上的许多答案,但是我仍然不确定是什么导致了错误。
import java.util.*;
public class CardShuffler {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
cardDeck deckCards = new cardDeck();
deckCards.newMethod(deckCards.deckOfCards);
//System.out.println(deckOfCards);
}
}
import java.util.*;
public class cardDeck {
ArrayList deckOfCards;
public cardDeck() {
ArrayList<String> deckOfCards = new ArrayList();
deckOfCards.add("JC");
deckOfCards.add("QC");
deckOfCards.add("KC");
deckOfCards.add("AC");
deckOfCards.add("JD");
deckOfCards.add("QD");
deckOfCards.add("KD");
deckOfCards.add("AD");
deckOfCards.add("JH");
deckOfCards.add("QH");
deckOfCards.add("KH");
deckOfCards.add("AH");
deckOfCards.add("JS");
deckOfCards.add("QS");
deckOfCards.add("KS");
deckOfCards.add("AS");
//String cardDeck = deckOfCards.toString();
//System.out.println("Before shuffling " + cardDeck);
//int numCards = deckOfCards.size();
//System.out.println(numCards);
System.out.println("Before shuffling " + "\n" + deckOfCards);
}
public ArrayList getDeckOfCards() {
return deckOfCards;
}
//Now shuffle the cards
public void newMethod(List<ArrayList> deckOfCards) {
//int numCards = deckOfCards.size();
int numCards = 16;
Random random = new Random();
random.nextInt();
for (int i = 0; i < numCards; i++) {
int change = i + random.nextInt(numCards - i);
Collections.swap(deckOfCards, i, change);
System.out.println("After shuffling " + random);
}
}
}
我还应该将元素放在 4x4 数组中,
XX XX XX XX
XX XX XX XX
XX XX XX XX
XX XX XX XX
但我开始认为那是一个笑话,到处看了看,似乎很困难。
谢谢。
Before shuffling
[JC, QC, KC, AC, JD, QD, KD, AD, JH, QH, KH, AH, JS, QS, KS, AS]
Exception in thread "main" java.lang.NullPointerException: Cannot invoke "java.util.List.get(int)" because "l" is null
at java.base/java.util.Collections.swap(Collections.java:501)
at cardDeck.newMethod(cardDeck.java:53)
at CardShuffler.main(CardShuffler.java:9)
Process finished with exit code 1
编辑我意识到是什么导致了 UnsupportedOperationsException,修复了它(我的交换中有一个 int,而不是我的 Arraylist)。 但是,现在我收到 null 错误,它说“l”是 null,我的代码中没有“l”。 再次编辑我发现''null''是由于“public void newMethod(ArrayList deckofCards),deckOfCards是null。我以为我已经在构造函数中声明了所有元素?
import java.util.*;
public class CardShuffler {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
cardDeck deckCards = new cardDeck();
//System.out.print(cardDeck.deckOfCards);
cardDeck.shuffleArray(cardDeck.deckOfCards);
for (Object i : cardDeck.deckOfCards) {
System.out.println(i);
}
}
}
import java.io.File;
import java.util.*;
import java.util.concurrent.ThreadLocalRandom;
public class cardDeck {
static ArrayList deckOfCards;
public cardDeck() {
List<String> deckOfCards = new ArrayList<>();
deckOfCards.add("JC");
deckOfCards.add("QC");
deckOfCards.add("KC");
deckOfCards.add("AC");
deckOfCards.add("JD");
deckOfCards.add("QD");
deckOfCards.add("KD");
deckOfCards.add("AD");
deckOfCards.add("JH");
deckOfCards.add("QH");
deckOfCards.add("KH");
deckOfCards.add("AH");
deckOfCards.add("JS");
deckOfCards.add("QS");
deckOfCards.add("KS");
deckOfCards.add("AS");
//String cardDeck = deckOfCards.toString();
//System.out.println("Before shuffling " + cardDeck);
//int numCards = deckOfCards.size();
//System.out.println(numCards);
System.out.println("Before shuffling " + "\n" + deckOfCards);
this.deckOfCards = (ArrayList) deckOfCards;
}
public ArrayList getDeckOfCards() {
return deckOfCards;
}
//Now shuffle the card
public static void shuffleArray(List<Integer> a) {
int numCards = a.size();
//int numCards = 16;
Random random = new Random();
random.nextInt();
for (int i = 0; i < numCards; i++) {
int index = random.nextInt(i + 1);
Collections.swap(a, i, index);
}
}
public static void swap(List<Integer> deckOfCards, int i, int change) {
int helper = deckOfCards.get(i);
deckOfCards.set(i, deckOfCards.get(change));
deckOfCards.set(change, helper);
}
}
Output:
[JC, QC, KC, AC, JD, QD, KD, AD, JH, QH, KH, AH, JS, QS, KS, AS]
[JC, QC, KC, AC, JD, QD, KD, AD, JH, QH, KH, AH, JS, QS, KS, AS]JD
AS
JH
AD
QC
KC
KS
QD
AC
JC
JS
KD
QH
KH
AH
QS
所以我通过改变编码解决了我的问题的洗牌部分。 现在我在打印过程中被困在格式上,正如我所说我需要将它格式化(包括预洗牌)如下
xx xx xx xx
xx xx xx xx
xx xx xx xx
xx xx xx xx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.