我不知道自己做错了什么。
Exception in thread "main" java.lang.NullPointerException
at helloWorld.HelloWorld.main(HelloWorld.java:30)
随意告诉我一个更好的方法。 错误似乎是我在扫描期间做错了 " String feels1 = scan2.nextLine();"在第13行。我认为可能有一种更简单的方式来写这个,但我只是在测试。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Hello");
System.out.println("Who am I speaking with?");
String name = scan.nextLine();
System.out.println("Hello " + name + "!");
String feels = null;
do{
System.out.println(name + ", how are you doing today?");
System.out.println("[Good] [Bad] [Ok]");
Scanner scan2 = new Scanner(System.in);
String feels1 = scan2.nextLine();
if (!feels1.equalsIgnoreCase("good") || !feels1.equalsIgnoreCase("bad")
|| !feels1.equalsIgnoreCase("ok")){
break;
} else {
System.out.println("I don't understand you.");
}
} while ( !feels.equalsIgnoreCase("good") ||!feels.equalsIgnoreCase("bad")||
!feels.equalsIgnoreCase("ok") );
// The error lies here.
if ( !feels.equalsIgnoreCase("good") ){
System.out.println("Im glad you're feeling good!");
}else if (!feels.equalsIgnoreCase("bad")){
System.out.println("I hope you feel better!");
}else{
System.out.println("I'm sure you'll feel better soon enough.");
}
}
编辑:
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("Hello");
System.out.println("Who am I speaking with?");
String name = scan.nextLine();
System.out.println("Hello " + name + "!");
do{
Scanner scan2 = new Scanner(System.in);
String feels = scan2.nextLine();
System.out.println(name + ", how are you doing today?");
System.out.println("[Good] [Bad] [Ok]");
if (!feels.equalsIgnoreCase("good") || !feels.equalsIgnoreCase("bad")
|| !feels.equalsIgnoreCase("ok")){
break;
} else {
System.out.println("I don't understand you.");
}
} while ( !feels.equalsIgnoreCase("good") ||!feels.equalsIgnoreCase("bad")||
!feels.equalsIgnoreCase("ok") );
if ( !feels.equalsIgnoreCase("good") ){
System.out.println("Im glad you're feeling good!");
}else if (!feels.equalsIgnoreCase("bad")){
System.out.println("I hope you feel better!");
}else{
System.out.println("I'm sure you'll feel better soon enough.");
}
}
答案 0 :(得分:1)
你的感觉变量永远不会为空。换句话说,你在哪里为它赋值:
feels = "something"; // ????
在使用它之前给它一个字符串。
更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。 您应该批判性地读取异常的堆栈跟踪以查找出错的代码行,抛出异常的行,然后仔细检查该行,找出哪个变量为null,然后追溯到您的代码,看看为什么。你会一次又一次地碰到这些,相信我。
例如,您的错误消息告诉您查看第30行:HelloWorld.java:30
,我敢打赌,在此行中您尝试取消引用感知变量。看到这个,您应该知道在使用之前检查您的代码到思考您为此变量分配的内容。这样做,你就会立即发现你的错误。
修改
您的最新代码基本上如下所示:
do {
String feels = "something"
} while(feels.equalsIgnoreCase(foo));
但这里的问题是,感觉是在do块内部声明的,并且只在do块中可见(在形成块的花括号内),因此在while的布尔条件下是不可见的。你想在do块之前声明感觉,以便while条件可以使用它。例如,
String feels = "";
do {
feels = "something"
} while(feels.equalsIgnoreCase(foo));