2016-04-18 1 views
3

Привет всем Я новичок в этом сайте, и это мой первый вопрос из моего класса программирования Java. Мне нужно создать программу, которая задает математический вопрос и сообщает пользователю, является ли он правильным или неправильным, но в требованиях также указано, что мне нужно создать метод, который генерирует новый вопрос, если первый вопрос верен, поэтому, когда компьютер спрашивает, что 5 раз 5, а пользовательские входы 25, метод должен генерировать два новых случайных числа и запрашивать у пользователя результат.Как создать метод, который повторяет функцию?

Это мой код. Я не ожидаю ответов, так как это школьное задание, но если кто-то может дать направление, это будет очень признательно, поскольку это мой первый курс в java-колледже.

import java.security.SecureRandom; //program uses class SecureRandom 
import java.util.Scanner; //program uses class Scanner 

public class CAI 
{ 
public static void main(String[] args) 
{ 

    System.out.println("Alex - Assignment 4\n"); 

    //create Scanner for input from command window 
    Scanner input = new Scanner(System.in); 

    //randomNumbers object will produce secure random numbers 
    SecureRandom randomNumbers = new SecureRandom(); 

    //generates two random numbers from 1 to 9 excluding 0 
    int random1 = 1+ randomNumbers.nextInt(9); 
    int random2 = 1+ randomNumbers.nextInt(9); 

    int answer; // declares answer from user 

    //calculates real result of first integer times second integer 
    int result = (random1 * random2); 

    //display generated integers 
    System.out.printf("What is %d times %d?\n",random1, random2); 

    do 
    { 
    answer = input.nextInt(); //keeps taking answer from user if wrong 
    if(answer == result) //if correct answer then print very good! 
     System.out.println("Very Good!"); 
    else // if wrong answer then print no please try again 
     System.out.println("No. Please try again"); 
    } 
    while (answer != result); 
} 
+1

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

+1

Поскольку это, как представляется, домашнее задание, я не хочу давать _too_ много. Но похоже, что вы поняли основы ... Вы понимаете петли (у вас есть одна проверка ответа). Таким образом, вам также понадобится создать шаг шага. Вам просто нужно выяснить, где цикл начинается/заканчивается (т. Е. Что внутри него). – user2478398

ответ

0

Вы можете добавить время цикла до генерации случайных чисел, которые не будут повторяться до тех пор, answer== "exit". Что-то вдоль этих линий будет работать нормально

+2

'answer' является' int', поэтому он никогда не будет равен '' exit'', и если бы вы не захотели использовать '==' для проверки. – azurefrog

+0

Вы правы, 'ответ == - 1' должен работать, поскольку ответ всегда будет положительным. – Nevado

0

Вы должны поставить break; заявление в нижней else петли и поставить все с вашего public static void декларации в «бесконечной» for цикла. Когда пользователь вводит неверный ответ, программа перейдет в цикл else и перерыв. В противном случае он будет продолжать повторяться в «бесконечном» цикле for. Вот пример кода, показывающий, что вы можете сделать.

import java.security.SecureRandom; //program uses class SecureRandom 
import java.util.Scanner; //program uses class Scanner 

public class CAI 
{ 
public static void main(String[] args) 
{ 

boolean loopTest = false; 

while (loopTest= true) 
{ 

System.out.println("Alex - Assignment 4\n"); 

//create Scanner for input from command window 
Scanner input = new Scanner(System.in); 

//randomNumbers object will produce secure random numbers 
SecureRandom randomNumbers = new SecureRandom(); 

//generates two random numbers from 1 to 9 excluding 0 
int random1 = 1+ randomNumbers.nextInt(9); 
int random2 = 1+ randomNumbers.nextInt(9); 

int answer; // declares answer from the user 

//calculates real result of first integer times second integer 
int result = (random1 * random2); 

//display generated integers 
System.out.printf("What is %d times %d?\n",random1, random2); 

do 
{ 
answer = input.nextInt(); //keeps taking answer from user if wrong 
if(answer == result) //if correct answer then print very good! 
    System.out.println("Very Good!"); 
else // if wrong answer then print no please try again 
    System.out.println("No. Please try again"); 
    break; 
} 
while (answer != result); 
} 

} 
} 

* Обратите внимание, что последний } не был включен в программу.

+1

' while (true) 'намного проще, чем ваш цикл for. – MalaKa

1

Я думаю, что у вас есть основной способ, с помощью которого ваши операторы цикла смешиваются. Оператор do будет выполнять свой блок кода один раз и не будет по своей сути выполнять цикл самостоятельно. Цикл while повторяется, пока вы не прекратите его. Поэтому, не сообщая вам, как структурировать ваше задание;) вы должны посмотреть на эти две вещи. Но ваш код компилируется и выполняет одно из того, что вы хотите. Таким образом, это означает, что проблема у вас есть в логическом аспекте вашего кода. Это означает, что компьютер не понимает, основываясь на структуре вашего кода при выполнении разделов вашего кода.

Итак, мой совет - попытаться написать его на простом английском языке (псевдокод), чтобы вы могли понять, как должна работать логика вашей программы, а затем перевести ее в код. Иногда просто говорю «Я хочу, чтобы x произошел, когда y. Но я хочу, чтобы это произошло, только если произошло событие». может помочь вам понять логику, как что-то должно работать.

удачи