如何解决Java中的NullPointerException错误?

如何解决Java中的NullPointerException错误?,java,nullpointerexception,Java,Nullpointerexception,我正在用java制作这个非常基本的概要文件创建者,在调试过程中,我不断地出现NullPointerException错误。我不知道如何解决这个问题,如果有人能告诉我如何解决这个问题,我将不胜感激。代码如下: import java.util.Scanner; public class Creator { String[] userNames; int[] birthYears; String[] genders; String userCommand;

我正在用java制作这个非常基本的概要文件创建者,在调试过程中,我不断地出现NullPointerException错误。我不知道如何解决这个问题,如果有人能告诉我如何解决这个问题,我将不胜感激。代码如下:

import java.util.Scanner;

public class Creator
{
    String[] userNames;
    int[] birthYears;
    String[] genders;
    String userCommand;

    Scanner scanner1 = new Scanner(System.in);
    Scanner scanner2 = new Scanner(System.in);

    public void create()
    {
        System.out.println("What is your name?");
        userNames[0] = scanner1.nextLine();
        System.out.println(userNames[0]);

        System.out.println("In what year were you born?");
        birthYears[0] = scanner1.nextInt();
        System.out.println(birthYears[0]);

        System.out.println("What is your gender?");
        genders[0] = scanner2.nextLine();
        System.out.println(genders[0]);
    }
}
在main方法中,我刚刚创建了一个Creator对象,并使用它调用方法
create()
。代码永远不会超过“What's your name?”代码块,每次运行它时,我都会出现以下错误:

Exception in thread "main" java.lang.NullPointerException
at Creator.create(Creator.java:19)
错误引用的是此行:

userNames[0] = scanner1.nextLine();

我不知道如何修复此问题,如果有人告诉我如何修复,我将不胜感激。

您尚未初始化阵列。您需要创建数组,因为位置0不存在,因此您有一个NullPointerException

String[] userNames = new String[5]; // for example to store 5 usernames

您还需要创建其他数组

之所以发生这种情况,是因为您只是声明了名为用户名、生日和性别的数组,而没有初始化它们。当您试图在不初始化对象的情况下访问对象或其方法时,会发生NullPointerException。务必在Creator类的构造函数中进行所有初始化

import java.util.Scanner;
公共类创建者{
字符串[]用户名;
int[]生日;
字符串[]性别;
字符串userCommand=“”;
扫描仪1;
扫描仪2;
//在默认构造函数内初始化。
公共创建者(){
用户名[]=新字符串[10];
生日[]=新整数[10];
genders[]=新字符串[10]
scanner1=新扫描仪(System.in);
scanner2=新扫描仪(System.in);
}
公共void create(){
System.out.println(“你叫什么名字?”);
用户名[0]=scanner1.nextLine();
System.out.println(用户名[0]);
你是哪一年出生的;
生日[0]=scanner1.nextInt();
System.out.println(生日[0]);
System.out.println(“你的性别是什么?”);
genders[0]=scanner2.nextLine();
System.out.println(性别[0]);
}
}

您需要的是初始化阵列。您可以这样做,考虑到它们所需的大小为1:

String[] userNames = new String[1];
 int[] birthYears = new int[1];
 String[] genders = new String[1];
现在你可以走了

如果不初始化它们,就意味着没有为这些变量分配内存,因此会出现NPE错误。当声明数组时,只创建一个引用变量。与基本类变量不同,数组在创建对象时不会实例化。要实际创建或为数组提供内存,必须创建如下数组:

String[] userNames = new String[5];

否则,在尝试访问数组时,您将在运行时获得
NullPointerException
,因为没有实际的数组对象附加到它。

这是否回答了您的问题?您可以通过初始化所有数组来解决问题,比如so
String[]userNames=newstring[5]//大小为5
。但是为什么你需要两台扫描仪呢?在我使用第一台扫描仪两次以上之后,它就停止工作了。我只是假设扫描器就是这样的,但也许我使用的IDE工作不正常。谢谢你指出这一点!请检查我的更新版本,这不会无误地通过整个代码!如果我没弄错的话,他会问“我能做些什么来解决Java中的NullPointerException错误?”。TL;博士你必须初始化所有数组。要缩小问题的范围,你是对的。不过,此人说,因为他/她不知道实际的问题。他/她只是在这里描述他/她在裸眼中看到的东西。因此,在那之后,他/她将再次面对这一点!你想要吗?我想没有!不,我明白。我没有初始化数组,所以它给出了错误。答案只是给出了一个示例,说明我需要为所有阵列执行哪些操作。