在Java中创建卡片组时ArrayIndexOutOfBoundsException

时间:2018-12-04 03:00:05

标签: java arrays indexoutofboundsexception

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

卡类:

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 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

class ByEntire extends AsyncTask<Void, Void, String> {

    String target;
    ProgressDialog dialog = new ProgressDialog(getActivity());  

    @Override
    protected void onPreExecute(){

        try{
            target = "http://wook1150.cafe24.com/ByEntire.php";
            dialog.setMessage("로딩중");   
            dialog.show();                
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

    @Override
    protected String doInBackground(Void... voids) {
        try {
            URL url = new URL(target);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            InputStream inputStream = httpURLConnection.getInputStream();
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            String temp;
            StringBuilder stringBuilder = new StringBuilder();
            while ((temp = bufferedReader.readLine()) !=null)
            {
                stringBuilder.append(temp + "\n");
            }
            bufferedReader.close();
            inputStream.close();
            httpURLConnection.disconnect();
            return stringBuilder.toString().trim();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public  void onProgressUpdate(Void... values){
        super.onProgressUpdate();
    }

    @Override
    public  void onPostExecute(String result){
        try{
            JSONObject jsonObject = new JSONObject(result);
            JSONArray jsonArray = jsonObject.getJSONArray("response");
            int count = 0;
            int courseID;
            String courseGrade;
            String courseTitle;
            String courseProfessor;
            int courseCredit;
            int courseDivide;     //////Error here//////
            int coursePersonnel;
            String courseTime;

            while(count < jsonArray.length()){

                JSONObject object = jsonArray.getJSONObject(count);
                courseID = object.getInt("courseID");
                courseGrade = object.getString("courseGrade");
                courseTitle = object.getString("courseTitle");
                courseProfessor = object.getString("courseProfessor");
                courseCredit = object.getInt("courseCredit");
                courseDivide = object.getInt("courseDivide)");
                coursePersonnel = object.getInt("coursePersonnel)");
                courseTime = object.getString("courseTime)");
                rankList.add(new Course(courseID, courseGrade, courseTitle, courseCredit, courseDivide, coursePersonnel,courseTime, courseProfessor));
                count++;
                dialog.dismiss();   
            }
            rankListAdapter.notifyDataSetChanged();
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

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

答案 3 :(得分:1)

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