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