2016-11-19 158 views
0

我想在BlueJ中开始学习Java,但我挣扎了很多。目前我正在查看ArrayLists。下面的代码编译正确:ArrayList的空指针异常

import java.util.ArrayList; 

public class TestArrayList 
{ 
    public static int colorCode; 
    public ArrayList<String> selection; 

    public TestArrayList() 
    { 
    } 

    private void selection() 
    { 
     selection = new ArrayList<String>(); 
     { 
      selection.add("red"); 
      selection.add("yellow"); 
      selection.add("blue"); 
     } 
    } 

    public void selectColor(int colorCode) 
    { 
     if (colorCode == 1) 
     System.out.println("You have selected " + selection.get(0) + ", the color of fire!"); 
     if (colorCode == 2) 
     System.out.println("You have selected " + selection.get(1) + ", the color of electricity!"); 
     if (colorCode == 3) 
     System.out.println("You have selected " + selection.get(2) + ", the color of water!"); 
     else 
     System.out.println("Invalid selection"); 
    } 
} 

但是当我尝试运行的方法“选择”,和I型1,2,或3,在弹出的窗口中,我得到的错误。所有其他值,如0,4,5,6都可以正常工作。但是,对于1,2,和3中,终端窗口显示以下错误:

java.lang.NullPointerException 
    at TestArrayList.selectColor(TestArrayList.java:25) 

和编辑器突出了线包含代码“selection.get(0)”,并返回错误“的java.lang .Null.Pointer异常:null“。

我相信你可以从我说话的方式上知道我对Java知之甚少。这显然是我做错了吗?感谢任何能提供帮助的人。

+1

*“但是当我尝试运行方法”选择“”*这不是真的,你调用'selectColor'。 – Tom

回答

3

您的方法selection未被调用。因此你的ArrayList为空。在空引用上调用方法会导致NullPointerException。

在构造函数中调用该方法。

public TestArrayList() 
{ 
    selection(); 
} 
+0

感谢您的帮助,每个人!这解决了它。我会说实话;我不完全明白为什么我需要调用这个方法。另外,如果我将方法调用放在构造函数中,还是放在selectColor方法中,这有什么关系吗? –

+0

我有一个新问题。如果你能够再次提供帮助,那会很棒。来自以前的错误消息现在消失了。但是,现在,当我输入1,2或3时,例如在一行中返回我的“Fire”文本,但是它也会在下一行中返回“无效的选择”。为什么它会返回第二行?谢谢 –

+0

@NickGiordano最后一个'if ... else ...'语句表示:如果'colorCode!= 3'在'else'内执行代码。我会建议使用[switch语句](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html)来解决它。 – lenny