2013-09-10 6 views
0

Я работаю над проблемой Java в тот момент, когда создаю программу, которая имитирует старое шоу викторины, вы делаете ставку на свою жизнь. Хозяин игры, Граучо Маркс, выбирает секретное слово, а затем чаты с участниками на некоторое время. Если любой участник использует секретное слово в предложении, он или она выигрывает 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) 

Может кто-нибудь объяснить, что я делаю неправильно? Большое спасибо! Miles

ответ

6

Добавьте static ключевое слово методу main так, что приложение имеет действительную точку входа

Как saySecret это метод экземпляра, он должен быть вызван в качестве таковых, замените

saysSecret(guess); 

с

g.saysSecret(guess); 
+0

Должно быть, вещь DrJava. Вы получите другое исключение, если оно было запущено из командной строки. – Makoto

+0

Да, вы можете видеть из его следа его попытку сделать свое отражение магии – Reimeus

+0

Когда я включаю статическую в основном, она говорит: нестатический метод saysSecret (java.lang.String) не может ссылаться на статический контекст Цените помощь! –

2

Вы также можете изменить свой цикл while к чему-то вроде этого:

while (in.hasNextLine()) { 
    String guess = in.nextLine(); 
    String answer = g.saysSecret(guess); 
    System.out.println(answer); 
} 

Нет необходимости создавать новую Scanner каждый раз. Кроме того, вы должны называть saysSecret экземпляром g, так как он не является статичным. Наконец, метод saysSecret возвращает ответ, но вам все равно нужно его распечатать.

Однако это будет продолжаться навсегда, ожидая ввода пользователя. Было бы лучше изменить ваш метод saysSecret, чтобы вернуть логическое значение и выйти из цикла, как только это логическое значение истинно, т. Е. Предположение было правильным.

Смежные вопросы