Как упростить работу с множеством переменных и/или компонентами??

 
 
 
Сообщения:13
Имеется множество переменных, отличных друг от друга лишь цифрой: a1, a2, a3, a4, a5 и т.д. Каким образом можно упростить написание кода, т.е. создавать условие не для каждой отдельной переменной, а сразу для всех (условие одинаковое). Просьба сильно не пинать, только начал разбираться с Java.
Например:
if a1>0 {
         textField_1.setText("Положительное");
}
else {
        textField_1.setText("Отрицательное");
}

if a2>0 {
         textField_2.setText("Положительное");
}
else {
        textField_2.setText("Отрицательное");
}


Можно ли использовать что-то вроде такого:
int i=1;
i=i++;
if a(i)>0 {
         textField_(i).setText("Положительное");
}
else {
        textField_(i).setText("Отрицательное");
}
Изменен:29 июл 2020 17:04
 
 
Сообщения:113
Использовать массив или коллекции.
    for (#Тип элемента# element : #коллекция или массив#) {
        // код
    }
Изменен:29 июл 2020 18:25
 
 
Сообщения:13
Dilettante:
Использовать массив или коллекции


Я так понимаю вот так?
int nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int i=1; i < nums.length; i++); {
if a[i]>0 {
         textField_[i].setText("Положительное");
}
else {
        textField_[i].setText("Отрицательное");
}
}
 
 
Сообщения:113
Да, примерно так... Только почему индекс с "единицы" начинается? Если оставить так, то нужно будет каждый раз вычитать -1 при доступе к массиву. Проще исправить условие 1 раз (int i = 0; i < nums.length - 1; i++). Так же в массив или коллекцию нужно поместить textFieldы и правильней будет сделать перебор по элементам куда вывод, а не по тем которые выводим. Ну и стоит изучить коллекции - они куда более универсальные, чем массивы.
Изменен:30 июл 2020 19:36
 
 
Сообщения:13
Dilettante:
Да, примерно так... Только почему индекс с "единицы" начинается?

Не доглядел, исправил.

Dilettante:
Так же в массив или коллекцию нужно поместить textFieldы и правильней будет сделать перебор по элементам куда вывод, а не по тем которые выводим.

Вот здесь мой мозг слегка сломался ))))
т.е. textField_[i].setText - является не правильным?
Изменен:31 июл 2020 15:47
 
 
Сообщения:113
vers0:
т.е. textField_[i].setText - является не правильным?

Правильно, я просто немного неправильно выразился и не досмотрел. Стандартные массивы - это не единственное, что можно применить при программировании, есть еще коллекции. Данный пример не отражает всю пользу применения коллекции, можно обойтись и массивом. Все зависит от ситуации.
public class Test {
    public static void main(String[] args) {
        int[] nums = {1, -2, 3, -4, 5, 6, 7, 8, 9};
        JFrame frame = new JFrame("Test");
        frame.setSize(500, 400);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));

        ArrayList<JTextField> textFieldsList = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            JTextField textField = new JTextField();
            textFieldsList.add(textField);
            frame.getContentPane().add(textField);
        }

        for (int i = 0; i < textFieldsList.size(); i++) {
            if (nums[i] < 0) {
                textFieldsList.get(i).setText(new String("Отрицательное".getBytes(), StandardCharsets.UTF_8));
            } else {
                textFieldsList.get(i).setText(new String("Положительное".getBytes(), StandardCharsets.UTF_8));
            }
        }
        frame.setVisible(true);
    }
}
Изменен:31 июл 2020 20:21
 
 
Сообщения:13
Dilettante:
Стандартные массивы - это не единственное, что можно применить при программировании, есть еще коллекции. Данный пример не отражает всю пользу применения коллекции, можно обойтись и массивом. Все зависит от ситуации.

Благодарю за ответ. Код я сохраню, т.к. сейчас пока не могу осознать суть коллекции полностью, решу вопрос массивом.

Eclipse пишет ошибку в строке 4 - i не может быть разрешен в переменную. В чем причина может быть? i уже равно 0, инициализировано
int[] nums= {1,2,3,4,5,6,7,8,9};
				for (int i=0; i < nums.length; i++);{
					int a[];
				if (a[i]<0) {
					
				}
				}
Изменен:01 авг 2020 11:22
 
 
Сообщения:113
Ну смотря на код, я вижу, что массив только объявлен, но не инициализирован...
 
 
Сообщения:13
Dilettante:
Ну смотря на код, я вижу, что массив только объявлен, но не инициализирован...

Разве int[] nums= {1,2,3,4,5,6,7,8,9}; - это не инициализация?
Вроде равноценно:
Int[] nums;
nums = new int[]{"1", "2", "3"};
Изменен:01 авг 2020 15:25
 
 
Сообщения:113
vers0:
Eclipse пишет ошибку в строке 4 - i не может быть разрешен в переменную. В чем причина может быть? i уже равно 0, инициализировано
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        for (int i = 0; i < nums.length; i++) {
            int a[];  
            if (a[i] < 0) {

            }
        }



В примере выше nums проинициализирован, а тот что объявлен в цикле for нет. И не понятно зачем он объявлен в цикле, таким образом он будет создаваться каждую итерацию цикла.

int a[];    - просто объявление
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};    - объявление с инициализацией


Это же самое касаемо других объявлений переменных:
String text;    - просто объявление
text = "Text";    -  инициализация
String text = "Text";    - объявление с инициализацией
String text = new String("Text");    - объявление с инициализацией
Изменен:01 авг 2020 16:20
 
 
Сообщения:13
Dilettante:
В примере выше nums проинициализирован, а тот что объявлен в цикле for нет. И не понятно зачем он объявлен в цикле, таким образом он будет создаваться каждую итерацию цикла.


Понял свою ошибку, нужно вот так:
int [] nums={1,2,3,4,5};
		for (int i = 0; i < nums.length; i++){
       }


Только вот вопрос, каким образом теперь вставить значения из nums[i] в textField_1.setText("");

В вашем примере:
ArrayList<JTextField> textFieldsList = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            JTextField textField = new JTextField();
            textFieldsList.add(textField);
            frame.getContentPane().add(textField);

Это список всех TextField, но если у меня в наименовании идет подчеркивание, то я должен поставить: textFieldsList.add(textField_); или как?
Может я не правильно обозначил вопрос. Мне массив нужен лишь для постановки чисел из него в нумерацию textField_, данные для сравнения берутся из другого места.
Изменен:03 авг 2020 07:23
 
 
Сообщения:113
vers0:
Только вот вопрос, каким образом теперь вставить значения из nums[i] в textField_1.setText("");

textField.setText(String.valueOf(nums[i]));

vers0:
Это список всех TextField, но если у меня в наименовании идет подчеркивание, то я должен поставить: textFieldsList.add(textField_); или как?
Может я не правильно обозначил вопрос. Мне массив нужен лишь для постановки чисел из него в нумерацию textField_, данные для сравнения берутся из другого места.

textFieldsList - это список с экземплярами JTextField, в моем примере этот список может принимать только JTextField, т.к. я указал при объявлении этой коллекции экземпляры каких объектов она будет хранить:
ArrayList<JTextField> textFieldsLis;

Эти самые экземпляры объектов добавить можно так:
JTextField textField_ = new JTextField();
textFieldsList.add(textField_ );

Или так:
textFieldsList.add(new JTextField());

Можно из другой коллекции или массива добавить в данный список. Я не могу привести все примеры как это можно сделать.

Прочитай лучше несколько книжек по Java, намного больше узнаешь... Это самые основы, которые очень хорошо разъясняются в большинстве книжек. Без понимания данных основ нормальной программы не напишешь.
Изменен:03 авг 2020 14:45
 
 
Сообщения:13
Dilettante:
textField.setText(String.valueOf(nums[i]));

это вставка непосредственно в поле textField, имелось ввиду вместо цифры 1 в textField_1

Спасибо за терпение и объяснения.

Dilettante:
Прочитай лучше несколько книжек по Java, намного больше узнаешь... Это самые основы, которые очень хорошо разъясняются в большинстве книжек. Без понимания данных основ нормальной программы не напишешь.

Прочел и не одну уже, в основном текста там: "System.out.println() выводит текст в консоль, попробуйте написать, получилось, молодцы, поехали дальше"
Изменен:04 авг 2020 07:29
 
Модераторы:frymock
Сейчас эту тему просматривают:Нет