我正在研究一个java问题,我正在创建一个模拟旧电视智力竞赛节目的节目,你打赌你的生活。游戏节目主持人Groucho Marx选择了一个秘密词,然后与参赛者聊了一会儿。如果任一参赛者在一个句子中使用该秘密词,他或她将赢得$ 100.00。
我的程序是为了检查这个秘密词。
这是我的代码:
import java.util.Scanner;
public class Groucho{
String secret;
Groucho(String secret){
this.secret = secret;
}
public String saysSecret(String line){
if(secret.equals(line)){
return("You have won $100! The secret word is: " + secret);
}
else{
return("false");
}
}
public void main(String[] args){
Scanner in = new Scanner(System.in);
String line = in.nextLine();
Groucho g = new Groucho(line);
while (in.hasNextLine()) {
Scanner input = new Scanner(System.in);
String guess = input.nextLine();
saysSecret(guess);
}
}
}
我认为他应该工作但是当我运行时我得到:
java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272)
有人可以解释我做错了什么吗? 非常感谢! 英里
答案 0 :(得分:6)
将static
关键字添加到main
方法,以便应用程序具有有效的入口点
由于saySecret
是一个实例方法,因此需要调用它,替换
saysSecret(guess);
与
g.saysSecret(guess);
答案 1 :(得分:2)
您可能还想将while
循环更改为以下内容:
while (in.hasNextLine()) {
String guess = in.nextLine();
String answer = g.saysSecret(guess);
System.out.println(answer);
}
无需每次都创建新的Scanner
。此外,您必须在saysSecret
实例上调用g
,因为它不是静态的。最后,saysSecret
方法只返回一个答案,但您仍然需要打印它。
然而,这仍将永远循环,等待用户输入。最好修改你的saysSecret
方法以返回一个布尔值,并在此布尔值为真时退出循环,即猜测是正确的。