有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是一个整数数组,包含卡片对象的ArrayList

我正在尝试创建一个有两名玩家的纸牌游戏;你和电脑。我试图形成一个主ArrayList,其中每一行包含一个cards对象的ArrayList。每一排都有钻石、棍棒、红心和空间;因此,主ArrayList最多有四行

卡片对象是卡片(int cardNo、Rank Rank、Suit Suit、BufferedImage tempcardImage、boolean isFaceup、boolean isCompCard)

在我添加以下代码之前,程序运行良好,生成了5张卡片的布局[program output 1 of 5][1[]1。这5种布局适合钻石、球杆。红心,黑桃,没有特朗普。在4 x 5的卡片网格下面是另一个,制作52张卡片。赢得一个把戏的玩家可以看这六张牌

我想写一个程序,让电脑挑选一张卡片放下来。因此,我编写了以下代码

下面的代码显示了在尝试设置ArrayList时出现的一些错误。任何帮助都将不胜感激, 因为这是我的第一个问题

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

我得到的错误如下:

Exception in thread "AWT-EventQueue-0" 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) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at 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) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466) at 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 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) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at 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) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)


共 (1) 个答案

  1. # 1 楼答案

    我试着在我的编辑器中运行这段代码:

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

    (我不得不用整数代替卡片,因为我没有完整的卡片定义)

    我收到的错误如下:

    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开始,然后从3开始下降。ArrayList文档指定ArrayList何时抛出错误:

    抛出:IndexOutOfBoundsException-如果索引超出范围(index<;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));
            }
        }
    } 
    

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