ArrayIndexOutOfBoundsException при создании колоды карт в Java - PullRequest
0 голосов
/ 04 декабря 2018

Я надеюсь получить некоторую помощь, хотя я знаю, что это, вероятно, очень простая ошибка, на которую я не могу найти ответ.Я пытаюсь создать колоду карт, и я постоянно сталкиваюсь с ошибкой.Вот мой код:

Класс карты:

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;
    }

 }

Это мой основной класс:

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++;
            }
        }

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Почему у вас 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));
    }
}
0 голосов
/ 04 декабря 2018

У вас также есть дополнительный номер в массиве «Лица» - вы пытаетесь создать 14 * 4 = 56 карт вместо 13 * 4 = 52.

0 голосов
/ 04 декабря 2018
int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};

Избавьтесь от 15 и выполните цикл в соответствии с предложением @ Geshode

0 голосов
/ 04 декабря 2018

Вы поменяли индексы для лиц и массивов в своих циклах for.Должно быть:

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++;
    }
}
...