初学者:空指针异常

时间:2013-04-03 05:25:36

标签: java netbeans

我刚开始使用Java。我试图制作一个简单的(几乎是Hello world)程序:

  1. 用户输入三名球员的姓名
  2. 程序打印这三个名称
  3. 结束
  4. 玩家类叫做#34; Jugador"。我收到NullPointerException错误。我或多或少地理解这个概念,但我仍然不知道为什么它不起作用=(。任何帮助都会受到赞赏。

    来源:

    Chicago2.java:

    package chicago2;
    import javax.swing.JOptionPane;
    public class Chicago2 {
        public static void main(String[] args) {
            String s;
            Jugador jugadores[];
            jugadores=new Jugador[3];
            int i=1;
            System.out.println("Loading players:");
            for(Jugador x: jugadores) {
                s=JOptionPane.showInputDialog("Name of player "+i+": ");
                x = new Jugador(s);
                System.out.println("Player "+i+": "+x.getName());
                i++;
            }
    
            System.out.println("Printing players name:");
            for(Jugador y : jugadores) {
                    System.out.println("Plays: "+y.getName());
            }
        }
    }
    

    Jugador.java:

    package chicago2;
    public class Jugador { 
        private String name;
        public Jugador(String nom)
        {
            name=nom;
        }
        public String getName() {
            return name;
        } 
    }
    

    我得到的错误 (输出):

      

    运行:

         

    加载玩家:

         

    玩家1:a

         

    玩家2:b

         

    球员3:c

         

    打印玩家姓名:

         

    线程中的异常" main"显示java.lang.NullPointerException

         

    at chicago2.Chicago2.main(Chicago2.java:19)

         

    Java结果:1

    第19行是:

    System.out.println("Plays: "+y.getName());
    

    工作环境:

      

    产品版本:NetBeans IDE 7.3(Build 201302132200)

         

    Java:1.7.0_17; Java HotSpot(TM)64位服务器VM 23.7-b01

         

    运行时:Java(TM)SE运行时环境1.7.0_17-b02

         

    系统:Linux版本2.6.32-41-在amd64上运行的通用; UTF-8; en_US(nb)

    截图:

    enter image description here 如果你读到这里,谢谢你。

2 个答案:

答案 0 :(得分:2)

您从用户那里获得的名称未存储在您的阵列中。你需要这样做: -

x = new Jugador(s);
jugadores[i] = x;

此外,int i=1;应为int i=0;

但为了更好的可读性,请参阅以下代码更改: -

System.out.println("Loading players:");
for(int i = 0; i < jugadores.length; i++) { // Better readability.
        s=JOptionPane.showInputDialog("Name of player "+i+": ");
        Jugador x = new Jugador(s);
        jugadores[i] = x; // Added
        System.out.println("Player "+i+": "+x.getName());
}

答案 1 :(得分:0)

您实际上并未在jugadores中存储任何内容。

要存储,请将行x = new Jugador(s);替换为x = jugadores[i-1] =new Jugador(s);