我试图与两名玩家一起制作纸牌游戏;你和电脑。我试图形成一个主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)
答案 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));
}
}
}
可能还有其他错误,但是由于只提供了少量代码,这些都是我能找到的。