Java 由于我的全局变量而导致NullPointerException

Java 由于我的全局变量而导致NullPointerException,java,class,global-variables,Java,Class,Global Variables,CharacterCreator类 CharacterHair类 全局变量类 当我运行这段代码时,输入generate就可以了。它运行平稳并生成随机的头发颜色。但是,当我键入“创建”时,我可以选择头发颜色,但它不会打印出我选择的头发颜色。当我从图片中删除全局变量时,程序会打印出我存储到pHair的任何内容。我希望程序将pHair的值分配给String[]everything 其他问题: 1.我读过java约定,因为我对编程还是相当陌生,我想问一下我是否很好地遵循了这些约定。 2.当我打印Syst

CharacterCreator类

CharacterHair类

全局变量类

当我运行这段代码时,输入generate就可以了。它运行平稳并生成随机的头发颜色。但是,当我键入“创建”时,我可以选择头发颜色,但它不会打印出我选择的头发颜色。当我从图片中删除全局变量时,程序会打印出我存储到
pHair
的任何内容。我希望程序将
pHair
的值分配给
String[]everything

其他问题: 1.我读过java约定,因为我对编程还是相当陌生,我想问一下我是否很好地遵循了这些约定。 2.当我打印
System.out.println(“选择其中一个:“+array.toString(hair))打印出来:选择其中一个:[黑色、红色、紫色、黄色、棕色、橙色、蓝色、金色]
有没有办法拆下支架?
3.如果有什么不正常或奇怪的事情,请告诉我


感谢您的时间:D

您的错误很小,您从未为您的everything字符串数组构造数组

你需要
everything=新字符串[一些长度]某处

如果你不这样做,那么一切都是空的

更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。您应该仔细检查抛出它的行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地碰到这些


接下来,您将希望去掉所有“全局”变量,并使大多数变量和方法非静态。您的设计已损坏。

您正在尝试访问未初始化的阵列。你的代码中没有任何东西的初始化,因此导致了NullPointerException。

你能粘贴stacktrace吗?对不起,那是什么?粘贴你得到的完整错误,包括由
@CaptainCloud引起的
,两秒钟后谷歌会回答“什么是stracktrace?”。我想,你应该磨练一下你的搜索技能。对不起,问这个问题只是出于本能我现在明白了堆栈跟踪是什么,我只是在Eclipse上使用了调试模式。Facepalm我简直不敢相信这是一个多么简单的错误,我对代码进行了大量的修改,甚至没有意识到我没有初始化变量!谢谢你的帮助。尽管如此,为什么我要使变量成为非静态变量,并去掉全局变量?初始化变量后效果很好。@CaptainCloud:有些变量应该是静态的,比如常量,但大多数不应该是静态的。如果它们是静态的,那么就失去了对代码进行单元测试的所有能力,就失去了面向对象设计的所有好处。还不如用Fortran编写代码。听上去,阅读面向对象的编程概念,尤其是当它们应用于Java时,您会受益匪浅,因为如果您试图创建一个程序而不首先理解它,那么您将面临一个艰难的过程。
import java.util.*;

public class CharacterCreator {
    /*ch = character
     c = create
     g = generate
     q = question
     r = random*/
    private static Scanner in;
    private static CharacterHair chcHair;
    private static CharacterHair chgHair;

    private static String generate = "generate";
    private static String create = "create";

    public static void main(String[] args) {
        System.out
                .println("Welcome to Character Creator! How would you like to create"
                        + " your character today? Type generate or create.");
        in = new Scanner(System.in);
        String answerHold = in.nextLine();
        if (answerHold.equals(generate)) {
            qgCharacter();
        } else if (answerHold.equals(create)) {
            qcCharacter();
        } else {
            return;
        }
    }
    public static void qgCharacter() {
        chgHair = new CharacterHair();
        chgHair.rbodyHair();
    }
    public static void qcCharacter() {
        chcHair = new CharacterHair();
        chcHair.cbodyHair();

    }
}
import java.util.*;

public class CharacterHair {

    private String[] hair;

    private Random random = new Random();
    private Scanner in = new Scanner(System.in);

    CharacterHair() {
        this.hair = bodyHair();
    }

    public String[] getHair() {
        return this.hair;
    }

    public String[] bodyHair() {
        String[] hair = { "black", "red", "purple", "yellow", "brown",
                "orange", "blue", "blonde" };
        return hair;
    }

    public void rbodyHair() {
        int aaa = random.nextInt(hair.length);
        String pHair = hair[aaa];
        System.out.println(pHair);
    }

    public void cbodyHair() {
        System.out.println("Pick one of these: " + Arrays.toString(hair));
        String pHair = in.nextLine();
        Globe.everything[0] = pHair;
    }
}
public class Globe {
    public static String[] everything;

}