У меня есть проект по вводу целочисленного значения в глобальный массив. Я использую ArrayList и не могу понять, как добавить значения в массив. Я не совсем уверен, как добавить целое число в массив, так как он глобальный, а функция actionPerformed локальная. Кроме того, считается ли, что массив был объявлен правильным?
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
}
public static void main(String args[]) {
ArrayList <Integer> intMarks = new ArrayList();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
Если вы заботитесь о потокобезопасности для вашего глобального списка: Коллекции#synchronizedList.




Массив должен быть объявлен как статическое поле вашего класса.
private static ArrayList <Integer> intMarks;
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
intMarks.add(intEnter);
}
public static void main(String args[]) {
intMarks = new ArrayList();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
если arraylist является глобальным, то он может быть доступен в любом месте в любой функции того же класса. в то время как вы можете добавить такие значения, как mArrayListName.add(1); то есть для массива типа int
Вы можете использовать шаблон проектирования синглтон.
public class Singleton {
private ArrayList<Object> arrayList;
private static Singleton instance;
private Singleton(){
arrayList = new ArrayList<Object>();
}
public static Singleton getInstance(){
if (instance == null){
instance = new Singleton();
}
return instance;
}
public ArrayList<Object> getArrayList() {
return arrayList;
}
}
И вы можете добавить ценность в любом классе.
public class ExampleClass{
Singleton.getInstance().getArrayList().add(sampleObject);
}
Примечание: если вы обеспечиваете многопоточную обработку, вы можете использовать блокировка с двойной проверкой., поскольку ArrayList не является потокобезопасным.
В вашем коде arraylist intMarks не является глобальным, это локальная переменная метода main.
Чтобы сделать ее глобальной переменной, вы должны сделать ее прямой переменной вашего класса.
class ClassName{
private static ArrayList <Integer> intMarks;
private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {
int intEnter = Integer.parseInt(this.txtEnter.getText());
intMarks.add(intEnter);
}
public static void main(String args[]) {
intMarks = new ArrayList<>();
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new MarksCalculator().setVisible(true);
}
});
}
}
Кроме того, вы должны сделать intMarks статическим, чтобы использовать его в методе main.
Как насчет атрибута класса?