一个整数数组,包含Card对象的

时间:2018-06-19 10:28:05

标签: java

我试图与两名玩家一起制作纸牌游戏;你和电脑。我试图形成一个主ArrayList,其中每一行都包含一个CardList对象的ArrayList。每一行都有钻石,俱乐部,心灵和空间;因此主ArrayList最多有四行。

卡片对象是卡片(int cardNo,Rank rank,Suit suit,BufferedImage tempcardImage,boolean isFaceup,boolean isCompCard)。

在我添加以下代码之前,该程序运行良好并生成了5张卡布局[程序输出1 of 5] [1 []] 1。这5种布局适用于钻石,Clubs.Hearts,黑桃和没有特朗普作为王牌。在4 x 5网格下面是另一张,制作52张牌。赢得技巧的玩家可以查看六张牌。

我试图编写一个程序,让计算机选择要放下的卡片。因此我编写了以下代码。

以下代码在尝试设置ArrayLists时显示了许多错误。任何帮助,将不胜感激, 因为这是我的第一个问题stackoverflow。

ArrayList<ArrayList<Cards>> suitsCards = new ArrayList<ArrayList<Cards>>();

for(int i=3;i>-1;i--){
    suitsCards.add(i,new ArrayList<Cards>());
}

for(int i=3;i>-1;i--){
    for(int k=0;k<combinedCardsList.size();k++){
         if(combinedCardsList.get(k).suitValue()==i){
              suitsCards.get(i).add(combinedCardsList.get(k));
         }
     }
} 

for(int i=0;i<4;i++){
    for(int k=0;k<suitsCards.get(i).size();i++){
        System.out.print(" "+suitsCards.get(i).get(k).suitValue());
    }
    System.out.println();
}

我得到的错误如下:

  

线程中的异常&#34; AWT-EventQueue-0&#34;   java.lang.IndexOutOfBoundsException:Index:3,Size:0 at   java.util.ArrayList.rangeCheckForAdd(ArrayList.java:665)at   java.util.ArrayList.add(ArrayList.java:477)at   newcards.GUI。(GUI.java:443)at   newcards.guiIntro.legOfGame(guiIntro.java:168)at   newcards.guiIntro $ 2.actionPerformed(guiIntro.java:107)at   javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)     在   javax.swing.AbstractButton中的$ Handler.actionPerformed(AbstractButton.java:2348)     在   javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)     在   javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)     在   javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)     在java.awt.Component.processMouseEvent(Component.java:6533)at   javax.swing.JComponent.processMouseEvent(JComponent.java:3324)at   java.awt.Component.processEvent(Component.java:6298)at   java.awt.Container.processEvent(Container.java:2236)at   java.awt.Component.dispatchEventImpl(Component.java:4889)at   java.awt.Container.dispatchEventImpl(Container.java:2294)at   java.awt.Component.dispatchEvent(Component.java:4711)at   java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)     在   java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)     在java.awt.Container.dispatchEventImpl(Container.java:2280)at   java.awt.Window.dispatchEventImpl(Window.java:2746)at   java.awt.Component.dispatchEvent(Component.java:4711)at   java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)at at   java.awt.EventQueue.access $ 500(EventQueue.java:97)at   java.awt.EventQueue $ 3.run(EventQueue.java:709)at   java.awt.EventQueue $ 3.run(EventQueue.java:703)at   java.security.AccessController.doPrivileged(Native Method)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)     在   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)     在java.awt.EventQueue $ 4.run(EventQueue.java:731)at   java.awt.EventQueue $ 4.run(EventQueue.java:729)at   java.security.AccessController.doPrivileged(Native Method)at   java.security.ProtectionDomain $ JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)     在java.awt.EventQueue.dispatchEvent(EventQueue.java:728)at   java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)     在   java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)     在   java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)     在   java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)     在   java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)     在java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

1 个答案:

答案 0 :(得分:0)

我尝试在编辑器中运行以下代码段:

ArrayList<ArrayList<Integer>> suitsCards = new ArrayList<ArrayList<Integer>>();

for(int i=3;i>-1;i--){
    suitsCards.add(i,new ArrayList<Integer>());
}

(由于我没有卡片的完整定义,因此我不得不用Integer代替Cards)

我收到的错误如下:

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 0
at java.base/java.util.ArrayList.rangeCheckForAdd(ArrayList.java:682)
at java.base/java.util.ArrayList.add(ArrayList.java:494)
at stack.StackOverflow.main(StackOverflow.java:12)

这与问题中的错误相同。问题是for循环从3开始并从那里下降。 ArrayList文档指定ArrayList何时会引发错误:

抛出:IndexOutOfBoundsException-如果索引超出范围(索引<0 || index> size())

由于大小为0,索引为3,因此ArrayList应该引发异常。 For循环应始终从0开始(出于多种原因,包括这一点)。我将for循环编辑为:

ArrayList<ArrayList<Integer>> suitsCards = new ArrayList<ArrayList<Integer>>();

for(int i=0;i<4;i++){
    suitsCards.add(i,new ArrayList<Integer>());
}

此循环工作正常。另外,第二个for循环也有相同的问题(尽管它可能不会给出错误),可以像这样解决:

for(int i=0;i<4;i++){
    for(int k=0;k<combinedCardsList.size();k++){
        if(combinedCardsList.get(k).suitValue()==i){
            suitsCards.get(i).add(combinedCardsList.get(k));
        }
    }
} 

可能还有其他错误,但是由于只提供了少量代码,这些都是我能找到的。