2012-02-05 28 views
2

如何将2d数组的单个列转换为ArrayList?如何将2d数组的单个列转换为ArrayList?

我有这样的代码:

 for (int i = 0; i < lordStats[0].length; i++) 
     troopList.add (lordStats[i][2]); 
//trooplist is a list and lordstats is a 2d array, they are both Strings 

,但它给了我很多的错误,我该怎么做。

这些都是我的错误,我能弄清楚的是我阵列中的某些东西已经搞乱了。请注意,没有这两行代码,程序运行良好。

线32-33

for (int i = 0; i < lordStats[0].length; i++) 
    troopList.add (lordStats[i][2]); 

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at arsenalLord.arsenalLordGui(arsenalLord.java:32) 
    at arsenalLord.loader(arsenalLord.java:18) 
    at siegeText$1.actionPerformed(siegeText.java:41) 
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028) 
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351) 
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
    at java.awt.Component.processMouseEvent(Component.java:6373) 
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 
    at java.awt.Component.processEvent(Component.java:6138) 
    at java.awt.Container.processEvent(Container.java:2085) 
    at java.awt.Component.dispatchEventImpl(Component.java:4735) 
    at java.awt.Container.dispatchEventImpl(Container.java:2143) 
    at java.awt.Component.dispatchEvent(Component.java:4565) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4621) 
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4282) 
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4212) 
    at java.awt.Container.dispatchEventImpl(Container.java:2129) 
    at java.awt.Window.dispatchEventImpl(Window.java:2478) 
    at java.awt.Component.dispatchEvent(Component.java:4565) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:679) 
    at java.awt.EventQueue.access$000(EventQueue.java:85) 
    at java.awt.EventQueue$1.run(EventQueue.java:638) 
    at java.awt.EventQueue$1.run(EventQueue.java:636) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 
    at java.awt.EventQueue$2.run(EventQueue.java:652) 
    at java.awt.EventQueue$2.run(EventQueue.java:650) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:649) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
+0

你得到什么错误? – rtheunissen 2012-02-05 07:42:52

+0

那么从上面的错误来看,好像代码在AWT组件上有错误。你能告诉或准确地发布第32行的内容吗? – javaCity 2012-02-05 07:48:01

+1

当然,数组必须被初始化。数组允许值,但有些列表不。 – Stephan 2012-02-05 07:52:21

回答

2

没有必要做一个循环,你可以直接调用Arrays.asList(array[])方法。如:这应该工作:

troopList = Arrays.asList(lordStats[2]); 

其中troopList是List<String>

+0

这不是完全错过OP是列表中第二个*列*的事实吗?这给你第二排,这显然更容易。 – 2012-02-05 08:19:15

+0

我可以更改数组以适合他的代码。 – Russell 2012-02-05 08:23:40