【问题标题】:ArrayIndexOutOfBoundsException When Creating Deck of Cards in Java在 Java 中创建卡片组时出现 ArrayIndexOutOfBoundsException
【发布时间】:2018-12-04 03:00:05
【问题描述】:

我希望得到一些帮助,即使我知道这可能是一个非常简单的错误,我似乎无法找到答案。 我想要完成的是创建一副纸牌,但我一直遇到越界错误。 这是我的代码:

卡类:

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

【问题讨论】:

    标签: java arrays indexoutofboundsexception


    【解决方案1】:

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

    【讨论】:

    • 这仍然会抛出ArrayIndexOutOfBoundsException,因为代码只分配了卡片组中的52个项目,但是会通过内循环和外循环56次。
    【解决方案2】:

    您的“面孔”数组中还有一个额外的数字 - 您尝试创建 14 * 4 = 56 张卡片,而不是 13 * 4 = 52。

    【讨论】:

      【解决方案3】:

      为什么你有 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));
          }
      }
      

      【讨论】:

        【解决方案4】:
        int[] faces = {2,3,4,5,6,7,8,9,10,11,12,13,14,15};
        

        摆脱 15 并按照@Geshode 的建议进行循环

        【讨论】:

          猜你喜欢
          • 2021-12-19
          • 2014-11-25
          • 1970-01-01
          • 2020-03-09
          • 1970-01-01
          • 2015-11-09
          • 1970-01-01
          • 1970-01-01
          • 2015-09-06
          相关资源
          最近更新 更多