Я кодирую проблему, где это будет x (+ или - или *) y = z, и он сгенерирует 4 возможных ответа для пользователя, у которого есть 1 хороший и 3 неправильных ответа. Я сделал большую часть кода, но я не понимаю, как я создаю ту же формулу, которая используется снова для Reponse (), потому что прямо сейчас, когда я выполняю код, Equation () создает свою собственную формулу, а Reponse () выполняет другую формулу. Также мне нужно знать, как я могу убедиться, что код работает, добавив систему, которая будет отображать формулу вроде 5 +5 =? и код покажет 4 ответа, у которых есть один хороший.

Вот код:

    public class Equation {

    int x, y, z;


    public Equation() {
        Random r = new Random();
        x = r.nextInt(50) + 1;
        y = r.nextInt(50) + 1;
        z = 0;
        char operator = '?';

        switch (r.nextInt(3)) {
            case 0:
                operator = '+';
                z = x + y;
                break;
            case 1:
                operator = '-';
                z = x - y;
                ;
                break;
            case 2:
                operator = '*';
                z = x * y;
                ;
                break;
            default:
                operator = '?';
        }

        System.out.print(x);
        System.out.print(" ");
        System.out.print(operator);
        System.out.print(" ");
        System.out.print(y);
        System.out.print(" = ");
        System.out.println(z);

    }

}

А для Response () тот, который генерирует ответы:

    public class Reponse {
    Equation equ = new Equation();
    int a, b, c, d;
    char operator = '?';

    public Reponse() {
        Random r = new Random();
        switch (r.nextInt(4)) {

            case 0:
                a = r.nextInt(2 * equ.z);
                break;

            case 1:
                b = r.nextInt(2 * equ.z);
                break;

            case 2:
                c = r.nextInt(2 * equ.z);
                break;
            case 3:
                d = equ.z;
                break;
            default:
                operator = '?';
        }
    }
}
-1
Jeffy 26 Фев 2018 в 22:29

1 ответ

Лучший ответ

Это потому, что вы инициализируете новый экземпляр класса Equation внутри своего класса Response.

Equation equ = new Equation();

Когда бы вы ни сделали что-то вроде,

Response r = new Response();

Будет создан новый экземпляр Equation.

Вам следует сделать следующее:

  1. Измените класс Response следующим образом:

    public class Response {
        int a, b, c, d;
        char operator = '?';
    
        public Response(Equation equ) {
            Random r = new Random();
            switch (r.nextInt(4)) {
    
                case 0:
                    a = r.nextInt(2 * equ.z);
                    break;
    
                case 1:
                    b = r.nextInt(2 * equ.z);
                    break;
    
                case 2:
                    c = r.nextInt(2 * equ.z);
                    break;
                case 3:
                    d = equ.z;
                    break;
                default:
                    operator = '?';
            }
        }
    }
    

Примечание. Я удалил экземпляр Equation из класса и передаю его конструктору.

  1. Создайте новый экземпляр Equation,

    Equation equ = new Equation();
    
  2. Создайте новый экземпляр Response, передав выше экземпляр Equation,

    Response r = new Response(equ);
    

Теперь вы можете создать несколько экземпляров класса Response, используя тот же экземпляр класса Equation, который вы создали.

1
user2004685 26 Фев 2018 в 22:54