初学者:空指针异常

Posted

技术标签:

【中文标题】初学者:空指针异常【英文标题】:Beginner: null pointer exception 【发布时间】:2013-03-24 15:44:08 【问题描述】:

我刚开始接触 Java。我正在尝试制作一个简单的(几乎是 Hello world)程序:

    用户输入三个玩家的名字 程序打印这三个名字 结束

玩家类被称为“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

打印球员姓名:

线程“主”java.lang.NullPointerException 中的异常

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

Java 结果:1

第 19 行是:

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

工作环境:

产品版本:NetBeans IDE 7.3(内部版本 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-generic 在 amd64 上运行; UTF-8; en_US (nb)

截图:

如果你读到这里,谢谢。

【问题讨论】:

【参考方案1】:

您从用户那里获得的名称没有存储在您的数组中。你需要这样做:-

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

【讨论】:

更好的是,将for(Jugador x: jugadores) 更改为for (int i = 0; i &lt; jugadores.length; ++i) 等...遍历未初始化的数组是非常不寻常的。【参考方案2】:

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

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

【讨论】:

以上是关于初学者:空指针异常的主要内容,如果未能解决你的问题,请参考以下文章

不可为空的抽象变量能否在 KOTLIN 中引发空指针异常?

jsp 505空指针异常

Collectors.toMap空指针异常

java中的空指针异常怎么解决

SpringBoot配置拦截器空指针异常

java hashmap空指针异常