java NullPointerException,因为我的全局变量
CharacterCreator类
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();
}
}
CharacterHair类
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;
}
当我运行这段代码时,输入generate就可以了。它运行平稳并生成随机的头发颜色 但是,当我键入“创建”时,我可以选择头发颜色,但它不会打印出我选择的头发颜色。当我从图片中删除全局变量时,程序将输出我存储到pHair
的任何内容。我希望程序将pHair
的值分配给String[] everything
其他问题:
1.我读过java约定,因为我对编程还是相当陌生,我想问一下我是否很好地遵循了这些约定。
2.当我打印System.out.println("Pick one of these: " + Arrays.toString(hair));
时,它会打印出来:选择其中一个:[黑色、红色、紫色、黄色、棕色、橙色、蓝色、金色]
有没有办法拆下支架?
3.如果有任何不正常或奇怪的事情,请告诉我
谢谢您抽出时间:D
# 1 楼答案
您正在尝试访问未初始化的数组。没有初始化>;一切<;在代码中,从而导致NullPointerException
# 2 楼答案
你的是一个很小的错误,你从来没有为你的everything字符串数组构造过数组
你需要某处
everything = new String[SOME_LENGTH];
如果你不这样做,那么一切都是空的
更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。您应该仔细检查抛出它的行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地碰到这些
接下来,您将希望去掉所有“全局”变量,并使大多数变量和方法非静态。你的设计被破坏了