2014-09-22 6 views
0

Нам нужно сделать программу, чем создавать математические задачи для разных уровней года, поэтому они могут быть разными. Мы должны произвести 2 случайных числа в пределах границы min и max. Затем мы должны заставить эти два числа выполнить операцию. Например, добавьте их вместе или разделите один на другой или умножьте их и т. Д.Генерация случайных математических вопросов

Программа работает на основе уровня, который пользователь предоставляет. Каждый год уровень имеет разные минимальные и максимальные номера и разные операции. Например. Год 1 - это только сложение и вычитание, а год 7 - деление умножения сложения и т. Д. Я определил разные методы, чтобы помочь мне сделать это, но я не могу заставить свою программу генерировать то, что я хочу. Он должен выглядеть примерно так, как показано на рисунке ниже. Часть моего кода здесь. Когда я запускаю свою программу, он просто создает целое число (10 или 20 в зависимости от того, сколько математических вопросов пользователь выбрал для попытки). Он не производит никаких операций между цифрами eg (+, -, /, x)

Может ли кто-нибудь указать мне в правильном направлении относительно того, что я делаю неправильно?

private static void generateQuestion(int yearLevel) { 
    int min = getMin(yearLevel); 
    int max = getMax(yearLevel); 

    int num1 = (int) (min + (max - min) * Math.random()); 
    int num2 = (int) (min + (max - min) * Math.random()); 

    int oper = getOper(yearLevel); 
    String result = " "; 
    char op; 
    switch (oper) { 
     case 1: 
      op = '+'; 
      result = (num1 + num2 + " "); 
      break; 
     case 2: 
      op = '-'; 
      result = (num1 - num2 + " "); 
      break; 
     case 3: 
      op = '*'; 
      result = (num1 * num2 + " "); 
      break; 
     case 4: 
      op = '/'; 
      result = (num1/num2 + " "); 
      break; 
     case 5: 
      op = '%'; 
      result = (num1 % num2 + " "); 
      break; 

    } 
    ; 
} 

private static int getMin(int yearLevel) { 
    int min = 0; 
    if (yearLevel == 0 || yearLevel == 1 || yearLevel == 2 || yearLevel == 3 || yearLevel == 4) { 
     min = 0; 
    } 
    if (yearLevel == 5 || yearLevel == 6) { 
     min = -999; 
    } 
    if (yearLevel == 7) { 
     min = -9999; 
    } 

    return min; 
} 

private static int getMax(int yearLevel) { 

    int max = 9; 
    if (yearLevel == 0 || yearLevel == 1 || yearLevel == 2 || yearLevel == 3 || yearLevel == 4) { 
     max = 9; 
    } 

    if (yearLevel == 5 || yearLevel == 6) { 
     max = 999; 
    } 
    if (yearLevel == 7) { 
     max = 9999; 
    } 

    return max; 

} 

public static int getOper(int yearLevel) { 

    yearLevel = 0; 
    int opBounds = 1; 
    if (yearLevel == 1 || yearLevel == 2) { 
     opBounds = 2; 
    } 
    if (yearLevel == 3 || yearLevel == 4 || yearLevel == 5) { 
     opBounds = 4; 
    } 

    if (yearLevel == 7) { 
     opBounds = 5; 
    } 

    return opBounds; 

} 

}

+0

Где вы используете переменные 'result & op' в void методе' generateQuestion() '??? –

+0

Я использую op, когда я переключаю свою операцию из метода getOper и преобразует число числового номера числа в операцию, например '+' '-' и т. Д. Затем я использую результат, прежде чем я разбиваю каждый случай, чтобы преобразовать его в строку – lildizzle63

+0

Каков ваш ожидаемый результат? Вы упоминаете изображение, но я не вижу его – Constantinos

ответ

0

Я совсем новичок, как вы и я хотел бы сделать дополнительный класс Вопрос о проведении генерируемой загадки и правильный результата. Затем в вашем

private static Question generateQuestion(int yearLevel) { 
    Question out=new Question(); 
    ... 
    //build string for selected case, for example 
    String answer=num1+"/"+num2; 
    double result=num1/num2; //rather use double 

    out.answer=answer; //String field 
    out.result=result; 

    return out; 
} 

А затем обрабатывает его, показывая вопрос и сравнивая его с ожидаемым результатом.

0

Вы объявили результат как String и попытались добавить в него числа, вы не можете этого сделать.
Так этот код:

String result = " "; 
    char op; 
    switch (oper) { 
     case 1: 
      op = '+'; 
      result = (num1 + num2 + " "); 
      break; 
     case 2: 
      op = '-'; 
      result = (num1 - num2 + " "); 
      break; 

Изменить что-то вроде:

int result = 0; 
    char op; 
    switch (oper) { 
     case 1: 
      op = '+'; 
      result = (num1 + num2); 
      break; 
     case 2: 
      op = '-'; 
      result = (num1 - num2); 
      break; 

Тогда вам придется использовать методы Java, как «Integer.toString (INT я)», чтобы распечатать целочисленные результаты (пример).

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