在 Java 中创建一副纸牌时出现 ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException When Creating Deck of Cards in Java
我希望得到一些帮助,尽管我知道这可能是一个非常简单的错误,我似乎找不到答案。
我想要完成的是创建一副纸牌,并且我将 运行 保持为越界错误。
这是我的代码:
卡片Class:
public class Card {
private String suit;
private int face;
public Card(int face, String suit){
face = this.face;
suit = this.suit;
}
public int getFace(){
return face;
}
public String getFaceAsString(int face){
int faceName = face;
String faceString = "";
if(faceName == 11){
faceString = "J";
} else if(faceName == 12){
faceString = "Q";
} else if(faceName == 13){
faceString = "K";
} else if(faceName == 14){
faceString = "A";
} else {
faceString = Integer.toString(faceName);
}
return faceString;
}
public String getSuit(){
return suit;
}
public void setSuit(String suit){
this.suit = suit;
}
}
这是我的主class:
import java.util.Random;
import java.util.Scanner;
public class Hero_Game {
public static void main(String[] args) {
String[] suits = {"Spades","Clubs","Hearts","Diamonds"};
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int index = 0;
Card[] deck = new Card[52];
for(int i = 0; i<suits.length;i++){
for(int j = 0; j<faces.length;j++){
deck[index] = new Card(faces[i],suits[j]);
index++;
}
}
您在 for 循环中切换了 faces 和 suits 数组的索引。应该是:
for(int i = 0; i<suits.length;i++){
for(int j = 0; j<faces.length;j++){
deck[index] = new Card(faces[j],suits[i]);
index++;
}
}
您的 "faces" 数组中还有一个额外的数字 - 您正在尝试创建 14 * 4 = 56 张卡片而不是 13 * 4 = 52 张。
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};
去掉 15 并按照@Geshode
的建议进行循环
为什么你有 14 张面孔而不是 13 张?
无论如何,为了更安全地在您的牌组中分配正确数量的物品,请使用 int numCardsInDeck = suits.length * faces.length;
来计算牌组中的物品总数。
试试这个:
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Game {
public static class Card {
final int face;
final String suit;
public Card(int face, String suit) {
this.face = face;
this.suit = suit;
}
@Override
public String toString() {
return face + " of " + suit;
}
}
public static void main(String[] args) {
String[] suits = {"Spades","Clubs","Hearts","Diamonds"};
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14};
int index = 0;
int numCardsInDeck = suits.length * faces.length;
Card[] deck = new Card[numCardsInDeck];
for(int i = 0; i < suits.length; i++) {
for(int j = 0; j < faces.length; j++) {
deck[index] = new Card(faces[j],suits[i]);
index++;
}
}
System.out.println(Arrays.toString(deck));
}
}
我希望得到一些帮助,尽管我知道这可能是一个非常简单的错误,我似乎找不到答案。 我想要完成的是创建一副纸牌,并且我将 运行 保持为越界错误。 这是我的代码:
卡片Class:
public class Card {
private String suit;
private int face;
public Card(int face, String suit){
face = this.face;
suit = this.suit;
}
public int getFace(){
return face;
}
public String getFaceAsString(int face){
int faceName = face;
String faceString = "";
if(faceName == 11){
faceString = "J";
} else if(faceName == 12){
faceString = "Q";
} else if(faceName == 13){
faceString = "K";
} else if(faceName == 14){
faceString = "A";
} else {
faceString = Integer.toString(faceName);
}
return faceString;
}
public String getSuit(){
return suit;
}
public void setSuit(String suit){
this.suit = suit;
}
}
这是我的主class:
import java.util.Random;
import java.util.Scanner;
public class Hero_Game {
public static void main(String[] args) {
String[] suits = {"Spades","Clubs","Hearts","Diamonds"};
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int index = 0;
Card[] deck = new Card[52];
for(int i = 0; i<suits.length;i++){
for(int j = 0; j<faces.length;j++){
deck[index] = new Card(faces[i],suits[j]);
index++;
}
}
您在 for 循环中切换了 faces 和 suits 数组的索引。应该是:
for(int i = 0; i<suits.length;i++){
for(int j = 0; j<faces.length;j++){
deck[index] = new Card(faces[j],suits[i]);
index++;
}
}
您的 "faces" 数组中还有一个额外的数字 - 您正在尝试创建 14 * 4 = 56 张卡片而不是 13 * 4 = 52 张。
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};
去掉 15 并按照@Geshode
的建议进行循环为什么你有 14 张面孔而不是 13 张?
无论如何,为了更安全地在您的牌组中分配正确数量的物品,请使用 int numCardsInDeck = suits.length * faces.length;
来计算牌组中的物品总数。
试试这个:
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Game {
public static class Card {
final int face;
final String suit;
public Card(int face, String suit) {
this.face = face;
this.suit = suit;
}
@Override
public String toString() {
return face + " of " + suit;
}
}
public static void main(String[] args) {
String[] suits = {"Spades","Clubs","Hearts","Diamonds"};
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14};
int index = 0;
int numCardsInDeck = suits.length * faces.length;
Card[] deck = new Card[numCardsInDeck];
for(int i = 0; i < suits.length; i++) {
for(int j = 0; j < faces.length; j++) {
deck[index] = new Card(faces[j],suits[i]);
index++;
}
}
System.out.println(Arrays.toString(deck));
}
}