2013-06-28 3 views
-2

Что я должен сделать, так это: Напишите программу, которая дает пользователю 10 случайных математических задач, каждый раз запрашивает ответ, а затем сообщает пользователю, были ли они правильными или неправильными. Каждая проблема должна использовать 2 случайных числа от 1 до 20 и случайную операцию (+, -, * или /). Вам нужно будет повторно рандомизировать числа для каждой математической проблемы. Вы также должны следить за тем, сколько проблем у них получается. В конце расскажите пользователю, сколько проблем у них получилось, и дайте им сообщение, основанное на их результатах. Например, вы можете сказать «хорошую работу» или «вам нужно больше практики.»Нужна помощь в создании случайного генератора математики

До сих пор я в недоумении

import java.util.Scanner; 

public class SS_Un5As4 { 

public static void main(String[] args){ 

Scanner scan = new Scanner(System.in); 

int number1 = (int)(Math.random()* 20) + 1; 

int number2 = (int)(Math.random()* 20) + 1; 

int operator = (int)(Math.random()*4) + 1; 

    if (operator == 1) 

    System.out.println("+"); 

if (operator == 2) 

    System.out.println("-"); 

if (operator == 3) 

System.out.println("*"); 

    if (operator == 4) 
      System.out.println("/"); 


     } 
    } 

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

+1

Что вы пробовали в этом отношении? Я бы сказал, что у вас самая сложная часть. –

+0

Кажется, что-то мне не хватает, но я просто не знаю, как это сделать. Если бы вы могли это сделать, это было бы потрясающе. – user2530677

+0

распечатать =?. Читайте в пользовательском вводе. Проверьте ответ и выведите сообщение. Возможно, вы захотите попытаться разделить на функции. Вы также можете хранить операторы в 'String operator =" + - */"'. Вы можете искать и печатать оттуда. –

ответ

0

Распечатка номера и операции, прочитать пользовательский ввод с помощью файла ввода-вывода, а также выполнять логику сохранения трека отвеченных вопросов Код:

public class SS_Un5As4 { 

    public static void main(String[] args){ 

     Scanner scan = new Scanner(System.in); 
     int number1 = (int)(Math.random()* 20) + 1; 
     int number2 = (int)(Math.random()* 20) + 1; 
     int operator = (int)(Math.random()*4) + 1; 
     String operation = null; 
     if (operator == 1) 
      operation="+";  
     if (operator == 2) 
       operation="-"; 
     if (operator == 3) 
      operation="*"; 
     if (operator == 4) 
      operation="/";  
     System.out.println("Question "+number1+operation+number2); 


    } 
} 

постоянно отслеживать результат и сравнить с пользователем ввод и проверить его правильно или неправильно

государственной статической силы основных (String [] арг) бросает IOException {

int number1 = (int)(Math.random()* 20) + 1; 
    int number2 = (int)(Math.random()* 20) + 1; 
    int operator = (int)(Math.random()*4) + 1; 
    String operation = null; 
    int result=0; 
    if (operator == 1){ 
     operation="+"; 
     result=number1+number2; 
    } 
    if (operator == 2) { 
     operation="-"; 
     result=number1-number2; 
    } 
    if (operator == 3){ 
     operation="*"; 
     result=number1*number2; 
    } 
    if (operator == 4){ 
     operation="/"; 
     result=number1/number2; 
    } 
    System.out.println("Question "+number1+operation+number2); 
    String result1 = new BufferedReader(new InputStreamReader(System.in)).readLine(); 
    if(result==Integer.parseInt(result1)) 
     System.out.println("Right"); 
    else 
     System.out.println("Wrong"); 
} 
+0

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

4

Ну , Что вам нужно добавить это:

  • сосчитать ВАРИАНТЫ ОТВЕТА:

    • переменной, которая подсчитывает правильные ответы (увеличивать его каждый раз, когда пользователь отвечает правильно);
    • переменная для хранения тока ответ;
    • переменная для хранения текущего пользовательского ответа (обновить ее каждую следующую проблему, не нужно хранить ее навсегда, в вашем случае требуется только статистика);
    • функция (пусть ее называть, например, gradeTheStudent()), которая использует несколько условий, чтобы решить, что распечатать в соответствии с количеством правильных ответов;
  • создать проблему: поколение проблемы

    • пут и ответить на оценку в цикл, который повторяется 10 раз;
    • в коммутаторе (т.е. при выборе операторов) также рассчитать правильный ответ:

      switch(operator){ 
      
           case 1: { 
           operation = "+"; 
           correctResult = number1 + number2; 
           break; 
          } 
          case 2: .... 
          case 3: .... 
          case 4: .... 
          default: break; 
      } 
      
    • не забудьте проверить, если пользователь ввел номер или что-то другое (вы можете использовать либо исключение или простое условие).

Таким образом, решение «псевдокод» для вашей проблемы будет выглядеть примерно так:

String[] reactions = ["Awesome!","Not bad!","Try again and you will get better!"] 
    num1 = 0 
    num2 = 0 
    operator = NIL 
    userScore = 0 
    userAnswer = 0 
    correctAnswer = 0 

    def function main: 

     counter = 0 
     for counter in range 0 to 10: 
      generateRandomNumbers() 
      correctAnswer = generateOperatorAndCorrectAnswer() 
      printQuestion() 
      compareResult() 

     gradeStudent() 

    def function generateRandomNumbers: 
     # note that you have already done it! 

    def function generateOperatorAndCorrectAnswer: 
     # here goes our switch! 
     return(correctAnswer); 

    def function printQuestion: 
     print "Next problem:" + "\n" 
     print num1 + " " + operator + " " + num2 + " = " + "\n" 

    def function compareResult(correctAnswer): 
     # get user result - in your case with scanner 
     if(result == correctAnswer) 
       print "Great job! Correct answer! \n" 
       userScore++ 
     else print "Sorry, answer is wrong =(\n" 

    def function gradeStudent (numOfCorrectAnswers): 
     if(numOfCorrectAnswers >= 7) print reactions[0] 
     else if(numOfCorrectAnswers < 7 and numOfCorrectAnswers >= 4) print reactions[1] 
     else print reactions[2] 

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

Примечание: Насколько я могу видеть из вашей текущей функции, вы не знакомы с объектно-ориентированным программированием на Java. Вот почему я не даю никаких советов о том, как здорово было бы использовать классы. Однако, если вы, то, пожалуйста, дайте мне знать, я добавлю информацию на свой пост.

Удачи вам!

2

Например, вы можете использовать что-то вроде этого:

public class Problem { 
    private static final int DEFAULT_MIN_VALUE = 2; 
    private static final int DEFAULT_MAX_VALUE = 20; 

    private int number1; 
    private int number2; 
    private Operation operation; 

    private Problem(){ 
    } 

    public static Problem generateRandomProblem(){ 
     return generateRandomProblem(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE); 
    } 

    public static Problem generateRandomProblem(int minValue, int maxValue){ 
     Problem prob = new Problem(); 
     Random randomGen = new Random(); 

     int number1 = randomGen.nextInt(maxValue + minValue) + minValue; 
     int number2 = randomGen.nextInt(maxValue + minValue) + minValue; 

     prob.setNumber1(number1); 
     prob.setNumber2(number2); 

     int operationCode = randomGen.nextInt(4); 
     Operation operation = Operation.getOperationByCode(operationCode); 
     prob.setOperation(operation); 

     return prob; 
    } 

    public int getNumber1() { 
     return number1; 
    } 

    public int getNumber2() { 
     return number2; 
    } 

    public Operation getOperation() { 
     return operation; 
    } 

    public void setNumber1(int number1) { 
     this.number1 = number1; 
    } 

    public void setNumber2(int number2) { 
     this.number2 = number2; 
    } 

    public void setOperation(Operation operation) { 
     this.operation = operation; 
    } 
} 

И еще один класс для проведения операций:

public enum Operation { 
    PLUS, 
    MINUS, 
    MULTIPLY, 
    DIVIDE; 

    public double operationResult(int n1, int n2) { 
     switch (this) { 
      case PLUS: { 
       return (n1 + n2); 
      } 
      case MINUS: { 
       return n1 - n2; 
      } 
      case MULTIPLY: { 
       return n1 * n2; 
      } 
      case DIVIDE: { 
       return n1/n2; 
      } 
     } 
     throw new IllegalArgumentException("Behavior for operation is not specified."); 
    } 

    public static Operation getOperationByCode(int code) { 
     switch (code) { 
      case 1: 
       return PLUS; 
      case 2: 
       return MINUS; 
      case 3: 
       return MULTIPLY; 
      case 4: 
       return DIVIDE; 
     } 
     throw new IllegalArgumentException("Operation with this code not found."); 
    } 
} 

Но вы не должны бросать IllegalArgumentException, есть еще варианты обработки неожиданных аргументов.

+0

Отличный ответ, если ОП действительно понимает ООП. +1 – petajamaja

0

Поскольку я не хочу передавать вам полное решение этой проблемы, и, похоже, у вас есть некоторые знания на языке Java, я просто напишу, как я буду продолжать/изменять то, что у вас есть в начале.

Сначала я бы сохранил результат в вашем операторе, если утверждения. Результат - int.

if (operator == 1) { 
    operation="+"; 
    result=number1+number2; 
} 

После этого я напечатаю математический вопрос и жду ответа пользователя.

System.out.println("What is the answer to question: " +number1+operation+number2); 
userResult = in.nextLine();  // Read one line from the console. 
in.close(); // Not really necessary, but a good habit. 

На этом этапе все, что вам нужно сделать, это сравнить результат с пользовательским вводом и распечатать сообщение.

if(Integer.parseInt(userResult) == result) { 
    System.out.println("You are correct!"); 
} else { 
    System.out.println("This was unfortunately not correct."); 
} 

Это решение является более или менее код psudo и некоторые обработки ошибок (если пользователь вводит тест в ответ, например) отсутствует, и я бы разбить его на методы, а не иметь все это в основной() , Следующим шагом было бы сделать его объектно-ориентированным (см. Ответ от деми). Удачи в завершении вашей программы.

0
In regard to generating random math operations with +, -, * &/with random numbers your can try the following; 


import java.util.*; 
public class RandomOperations{ 
    public static void main(String[] args){ 

     Random `mathPro` = new Random(); 
     //for the numbers in the game 
     int a = mathPro.nextInt(50)+1; 
     int b = mathPro.nextInt(50)+1; 

     //for the all the math operation result 

     int add = a+b; 
     int sub = a-b; 
     int mult = a*b; 
     int div = a/b; 
     //for the operators in the game 

     int x = mathPro.nextInt(4); 

     /* 
     -so every random number between 1 and 4 will represent a math operator 

     1 = + 
     2 = - 
     3 = x 
     4 =/

     */ 

     if(x == 1){ 

      System.out.println("addition"); 
      System.out.println(""); 
      System.out.println(a); 
      System.out.println(b); 
      System.out.println(add); 

     }else if(x == 2){ 

      System.out.println("subtraction"); 
      System.out.println(""); 
      System.out.println(a); 
      System.out.println(b); 
      System.out.println(sub); 

     }else if(x == 3){ 

      System.out.println("multiplication"); 
      System.out.println(""); 
      System.out.println(a); 
      System.out.println(b); 
      System.out.println(mult); 

     }else{ 

      System.out.println("division"); 
      System.out.println(""); 
      System.out.println(a); 
      System.out.println(b); 
      System.out.println(div); 

     } 
    //This os for the user to get his input then convert it to a numbers that the program can 
    //understand 
     Scanner userAnswer = new Scanner(System.in); 
       System.out.println("Give it a try"); 
       int n = `userAnswer.nextInt();