Как передать массив из одного класса в другой? - PullRequest
2 голосов
/ 14 июля 2020

Я пытаюсь получить данные из одного массива в классе в другой класс (чтобы я мог скопировать результат). Я знаю, что в целом вы должны использовать метод get-set для достижения этого, однако я не уверен, как достичь sh этого с имеющимися у меня классами.

Этот метод (в моей спине- end class) рандомизирует массив меток, и мне нужен результат в двух разных классах. В одном классе я могу получить результат, потому что у меня есть массив меток, как и в другом классе (но мне нужен тот же результат из первого класса, а не другой рандомизированный массив)

public Label[] randomise(Label[] lbl){
        Random randomiseArr = new Random();
        for (int i = 0; i < lbl.length; i++) {
            int randomIndexToSwap = randomiseArr.nextInt(lbl.length);
            Label temp = lbl[randomIndexToSwap];
            lbl[randomIndexToSwap] = lbl[i];
            lbl[i] = temp;
        }
        return lbl;
    }

Это мой первый класс (тот, где я получаю свой результат, метки были созданы выше - я просто не включил их):

public void initialize(URL url, ResourceBundle rb) {
        
        backend back = new backend();
        
        Label[] lbl = {t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14,
            t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25};

        int ranClr = (int) (Math.random() * (10 - 1)) + 1;

        if (ranClr <= 5) {
            back.redTeam(back.randomise(lbl), clr1, clr2, clr3, clr4);
        } else {
            back.blueTeam(back.randomise(lbl), clr1, clr2, clr3, clr4);
            
        }
        
        
    }

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

    public void initialize(URL url, ResourceBundle rb) {
        
        backend back = new backend();
        
        Button[] btn = {btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9,
            btn10, btn11, btn12, btn13, btn14, btn15, btn16, btn17, btn18, btn19,
            btn20, btn21, btn22, btn23, btn24, btn25};

        Label[] lbl = {lbl1, lbl2, lbl3, lbl4, lbl5, lbl6, lbl7, lbl8, lbl9,
            lbl10, lbl11, lbl12, lbl13, lbl14, lbl15, lbl16, lbl17, lbl18, lbl19,
            lbl20, lbl21, lbl22, lbl23, lbl24, lbl25};
}

1 Ответ

2 голосов
/ 14 июля 2020

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

Например, у вас может быть такое поле в верхней части вашего backend класса:

private Label[] randomisedLabels;

Затем у вас может быть получатель для поля:

public Label[] getRandomisedLabels() {
    return randomisedLabels;
}

Теперь мы можем изменить ваш метод randomise, чтобы он имел возвращаемый тип void и вместо этого сохранил результат: randomisedLabels:

public void randomise(Label[] lbl){
    Random randomiseArr = new Random();
    for (int i = 0; i < lbl.length; i++) {
        int randomIndexToSwap = randomiseArr.nextInt(lbl.length);
        Label temp = lbl[randomIndexToSwap];
        lbl[randomIndexToSwap] = lbl[i];
        lbl[i] = temp;
    }
    // Instead of returning the array, store it so it can be used later
    randomisedLabels = lbl;
}

. Выполнение этого способа позволит вам вызвать randomise один раз и использовать результат вызова с getRandomisedLabels() несколько раз без обработки данных.

РЕДАКТИРОВАТЬ: Как упомянул ниже Клиабах, этот подход работает только в том случае, если вы используете один и тот же экземпляр класса backend, поскольку в каждом экземпляре класса хранится другой массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...