Выберите, что хранит массив на основе нажатия кнопки

#java #arrays #swing #data-structures

#java #массивы #swing #структуры данных

Вопрос:

Я пытаюсь найти способ выбрать, что хранит массив, в зависимости от того, какую кнопку пользователь нажимает в графическом интерфейсе.

Очевидно, что это не будет компилироваться из-за того, что имя переменной будет одинаковым.

Вычисления выполняются вне цикла, но используют «значения». Я просто хочу, чтобы пользователь мог определять, какие значения установлены в массиве, на основе того, какую кнопку они нажимают. Очевидная проблема заключается в невозможности использовать имя «значения» дважды, и именно здесь у меня возникает проблема, поскольку у меня есть цикл for, для которого требуется переменная «значения», и я не хочу повторно добавлять код несколько раз для каждого набора данных, когда больше всеговероятно, простое обходное решение, которое я в настоящее время не вижу.

Ответ №1:

Просто извлеките объявление:

 double[] Xvalues = null;
if (e.getSource() == X1btn) {
   Xvalues = new double[]{2001,350,799,1004};
}
else if (e.getSource() == X2btn) {
   Xvalues = new double[]{5,62,28,500};
}
 

Комментарии:

1. Идеальный ответ. Удаление объявления сработало как шарм. Спасибо!

Ответ №2:

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

Пример

 public final class JArrayButton extends JButton{
    private final double[] values;

    public JArrayButton(double[] values){
        this.values = values;
    }

    // ... other stuff (e.g. constructors)

    public final double[] getValues(){
        return values;
    }
}
 

Ответ №3:

Что, если вы создадите массив вне цикла. double Xvalues[] = new Xvalues[5]; // или любой другой размер, который вы хотите

а затем используйте оператор if/else

 if (e.getSource() == X1btn) {
Xvalues ={2001,350,799,1004};
} else if (e.getSource() == X2btn) {
Xvalues={5,62,28,500};
}