虽然循环没有运行?

时间:2013-09-10 15:08:32

标签: java

我正在研究一个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)

有人可以解释我做错了什么吗? 非常感谢! 英里

2 个答案:

答案 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方法以返回一个布尔值,并在此布尔值为真时退出循环,即猜测是正确的。