2015-10-18 7 views
1

Я по-прежнему относительно новичок в Java и работаю над программой для класса. У меня все закодировано, и он отлично работает, но мне нужно выйти из метода, когда я набираю строку «exit». Мой текущий код будет ниже. У меня должно быть 3 метода (включая основной) и цикл while (или do-while, но мой профессор запретил нам использовать их) в соответствии с назначением. Это программа «magic eight ball», и цикл while задан, чтобы продолжать задавать вопросы, пока пользователь не наберет «exit», но я не могу заставить цикл «while» работать правильно. Если я буду вводить exit в качестве первой строки, он выйдет, как и предполагалось, но если я наберу любую другую строку, она будет продолжать работать, даже после того, как я напечатаю exit, и в основном станет бесконечным циклом вопросов/ответов. Любая помощь приветствуется.Выход из метода с определенной строкой

Сторона примечания, эти цифры в заявлении переключателя являются чисто держателями места для будущих ответов, поэтому игнорируйте их.

import java.util.*; 

public class FirstProblem { 
    public static void main (String [] args) { 
     getQuestion(); 
    } 

    public static String getQuestion() { 
     Scanner input = new Scanner (System.in); 
     System.out.print ("Ask any question you need answered and prepare yourself for the sage advice of......your computer.\nJust type \"exit\" when you can't handle the truth any longer.\nQuestion: "); 
     String question = input.nextLine(); 
     String exit = "exit"; 
     showAnswer(); 
     while (!question.equals(exit)) { 
      getQuestion(); 
     } 
     return question; 
    } 

    public static void showAnswer() { 
     int answer = (int)(Math.random() * 10); 
     switch (answer) { 
      case 0: System.out.println ("1"); break; 
      case 1: System.out.println ("2"); break; 
      case 2: System.out.println ("3"); break; 
      case 3: System.out.println ("4"); break; 
      case 4:System.out.println ("5"); break; 
      case 5:System.out.println ("6"); break; 
      case 6:System.out.println ("7"); break; 
      case 7: System.out.println ("8"); break; 
      case 8: System.out.println ("9"); break; 
      case 9: System.out.println ("10"); break; 
     } 
     return; 
    } 
} 

ответ

0

Ваша проблема в этом коде:

 showAnswer(); 
     while (!question.equals(exit)) { 
      getQuestion(); 
     } 

Это делает рекурсивный вызов, если вы не знаете, что рекурсия об этом читайте здесь Wikipedia

решение будет чтобы изменить его:

 while (!question.equals(exit)) { 
      showAnswer(); 
      System.out.print("Question: "); 
      question = input.nextLine(); 
     } 

Вот фрагмент кода on Ideone ,

1

Изменение вызова внутри время цикла от:

while (!question.equals(exit)) { 
    getQuestion(); 
} 

к:

while (!question.equals(exit)) { 
    return getQuestion(); // <-- return here 

} 

Объяснение:
Так что это recursive вызов, когда вы, наконец, типа "выход" это ответ существует только в scope последнего вызова, этот вызов возвращается к предыдущему вызову, в котором вопрос отличается от «exit», и, следовательно, он отображает вопрос снова и снова ...


Ответить на комментарий о избавлении от последнего ответа:

Если вы не хотите, чтобы отобразить ответ после того, как пользователь ввел «выхода» вам может изменить showAnswer(), чтобы сделать это, передавая ему вопрос, и если он равен «выход» катапультирование перед выполнением печати:

public static String getQuestion() { 
    ... 
    showAnswer(question); 
    ... 
} 

public static void showAnswer (String question) { 
    if ("exit".equals(question)) return; 
    ... 
} 
+0

при вводе программы выхода будет остановлено, но ответ показывает. как я могу избавиться от него? – Roushan45

+0

@ Roushan45 Я обновлю ответ за минуту – alfasin

+0

thnx сейчас работает – Roushan45

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