2017-01-18 3 views
-1

Я написал магическую 8-мя программу с 20 различными возможными ответами. Каждый раз, когда ответ выбирается случайным образом, я пытаюсь записать этот ответ на файл. Однако в цикле do-while в основном методе строка «writeFile (ответ)»; не работает, потому что «ответ» отсутствует. У меня возникают проблемы с его исправлением.Написание ответов на файл Java

import java.io.*; 
import java.util.*; 

public class App { 

public static void main(String[] args) { 

    String terminate = "Q"; 
    String Question = ""; 
    System.out.println("I am the all-knowing Magic 8 Ball!"); 
    String something = "This is an easter egg!"; 

    do { 
     Scanner scnr = new Scanner(System.in); 
     System.out.println(""); 
     System.out.println("Ask your question here or enter 'Q' to quit:"); 
     Question = scnr.nextLine(); 
     continueGame(Question); 
     writeFile(answer); 
    } while (!(terminate.equals(Question))); 
    } 

public static void continueGame(String Question) { 

    char terminate = 'Q'; 
    char condition = Question.charAt(0); 

    if (condition == terminate) 
    { 
     System.out.println(""); 
     System.out.println("Thanks for playing!"); 
     System.exit(0); 
    } 
    try 
    { 
     Random rand = new Random(); 
     int choice; 
     choice = 1 + rand.nextInt(20); 
     responseOptions(choice, Question); 
    } 
    catch (Exception e) 
    { 
     System.out.println("Error: Invalid"); 
    } 
} 

public static String responseOptions(int choice, String answer) 
{ 
    switch (choice) 
    { 
     case 1: answer = "Response: It is certain"; break; 
     case 2: answer = "Response: It is decidely so"; break; 
     case 3: answer = "Response: Without a doubt"; break; 
     case 4: answer = "Response: Yes, definitely"; break; 
     case 5: answer = "Response: You may rely on it"; break; 
     case 6: answer = "Response: As I see it, yes"; break; 
     case 7: answer = "Response: Most likely"; break; 
     case 8: answer = "Response: Outlook good"; break; 
     case 9: answer = "Response: Yes"; break; 
     case 10: answer = "Response: Signs point to yes"; break; 
     case 11: answer = "Response: Reply hazy, try again"; break; 
     case 12: answer = "Response: Ask again later"; break; 
     case 13: answer = "Response: Better not tell you now"; break; 
     case 14: answer = "Response: Cannot predict now"; break; 
     case 15: answer = "Response: Concentrate and ask again"; break; 
     case 16: answer = "Response: Don't count on it"; break; 
     case 17: answer = "Response: My reply is no"; break; 
     case 18: answer = "Response: My sources say no"; break; 
     case 19: answer = "Response: Outlook not so good"; break; 
     case 20: answer = "Response: Very doubtful"; break; 
    } 
    System.out.println(""); 
    System.out.println(answer); 

    return answer; 
} 

public static String writeFile(String something) { 

    try { 
     FileWriter fw = new FileWriter("filename.txt", true); 
     fw.write(something); 
     fw.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return something; 
} 
} 
+0

О чем вы даже пытаетесь обратиться? Единственное, что там называется «ответ», это параметр метода. –

+0

Неплохая идея переопределить параметр метода. –

+0

@AndyTurner различные варианты ответа в методе responseOptions находятся под переменной «ответ» –

ответ

1

Сначала я бы немного изменить метод responseOptions. Необходимо только параметр выбора:

public static String responseOptions(int choice) { 
    String answer; 
    switch (choice) { 
     // ... 

Затем мы должны изменить continueGame немного:

public static String continueGame(String Question) { 
    // ... 
     return responseOptions(choice); 
    } 
    catch (Exception e) 
    { 
     return"Error: Invalid" 
    } 
} 

и, наконец, в главном

// ... 
String answer = continueGame(Question); 
// ... 

Поэтому в основном мы возвращаем ответ от responseOptions метод назад к основному, чтобы иметь возможность передать его методу печати.

+1

Работала отлично. Большое спасибо за Вашу помощь. Я ценю это. –

1

Вы можете изменить public static void continueGame(String Question) в public static String continueGame(String Question) и поместить оператор возврата, как: return responseOptions(choice, Question);

Наконец в основной вы можете написать:

writeFile(continueGame(Question)); 

вместо:

continueGame(Question); 
     writeFile(answer); 
+0

, просто добавьте ему change responseOptions (выбор, вопрос); вернуть responseOptions (выбор, вопрос); –

+0

Но если я правильно понимаю, responseOptions (выбор, вопрос); уже имеет оператор возврата ... – coder

+0

@coder по какой-то причине говорит, что он не может найти переменную «выбор» –

0

Тейк обратите внимание, что responseOptions возвращает значение, но вы игнорируете его.

int choice; 
choice = 1 + rand.nextInt(20); 
responseOptions(choice, Question); // Question is not assigned to the return value 

В целом, я думаю, вы должны попробовать это вместо этого.

public static String responseOptions(int choice) 
{ 
    String [] answers = new String[] { 
     "It is certain", 
     "It is decidely so", 
     "Without a doubt" 
    }; 
    return "Response: " + answers[choice - 1]; 
} 

(В идеале answers может быть определено в другом месте в качестве класса-переменной.)

И позвони, как так

// within continueGame() 
int choice = 1 + rand.nextInt(20); 
String answer = responseOptions(choice); 
writeFile(answer); // Write it here, where it is in scope 

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

  • Нет связанных вопросов^_^