Предыдущий элемент в ArrayList

#java #list #swing #arraylist #jframe

#java #Список #swing #arraylist #jframe

Вопрос:

с помощью кнопки я пытаюсь показать предыдущий элемент моего arraylist, но он не показывает ожидаемый результат, он возвращает только первый элемент, данные, которые я хочу показать им в соответствующих полях формы

 public class AutoForm extends javax.swing.JFrame {

    ArrayList<Car> carsList;

    int counter;

    public AutoForm() {
        initComponents();

        carsList= new ArrayList<Car>();
        counter = 0;

    }

private void BtnSendActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String id = txtId.getText();
        String brand = JcomboBrand.getSelectedItem().toString();
        int doors = Integer.parseInt(SpinnerDoors.getValue().toString());

        Car objCar = new Car();

        objCar.setId(id);
        objCar.setBrand(brand);
        objCar.setDoors(doors);

        carsList.add(objCar);
        counter  ;
        JOptionPane.showMessageDialog(this, "The car was added"   counter);



    }    
private void BtnPreviousActionPerformed(java.awt.event.ActionEvent evt) {                                            

        for (int i = 0; i <= carsList.size(); i  ) {
            Car carTemp = carsList.get(i);
            if (counter > 0) {

                counter--;

                txtId.setText(carTemp.getId());
                JcomboBrand.setSelectedItem(carTemp.getBrand());
                SpinnerDoors.setValue(carTemp.getDoors());


            } else {
                JOptionPane.showMessageDialog(this, "There are no records");
            }
            break;
        }
    }
}
  

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

1. Имена методов не должны начинаться с символа верхнего регистра. Имена переменных не должны начинаться с символа верхнего регистра. Изучите стандарты Java, следуя примерам, и не создавайте свои собственные

2. Когда счетчик когда-либо будет больше 0? Вы инициализируете его равным 0 и имеете код для его уменьшения, но никогда не увеличиваете. Я бы предположил, что если вы хотите отобразить предыдущее значение из ArrayList, нет необходимости в цикле. Вы просто уменьшаете «счетчик» и получаете значение из ArrayList на основе нового значения. Но, не зная контекста того, как работает приложение, вам нужно решать детали самостоятельно.

3. Какой смысл добавлять новый код, но игнорировать предложение исправить проблему? Честно говоря, код все еще не имеет смысла. Что произойдет, если вы добавите две машины в ArrayList, но затем дважды нажмете кнопку «предыдущий», а затем добавите еще одну машину. Согласно вашей логике, существует только один car, потому что вы увеличиваете счетчик в 3 раза и уменьшаете его дважды, но у вас есть 3 cars в ArrayList, потому что я не вижу, где вы когда-либо удаляли car из ArrayList. Итак, ваше определение «предыдущий» не имеет для меня никакого смысла.

4. @camickr Большое вам спасибо за ваши рекомендации, я очень новичок в Java

Ответ №1:

Попробуйте следующее

 private void BtnPreviousActionPerformed(ActionEvent evt) {        
    if (counter > 0) {
        counter--;
        Car carTemp = carsList.get(counter);

        txtId.setText(carTemp.getId());
        JcomboBrand.setSelectedItem(carTemp.getBrand());
        SpinnerDoors.setValue(carTemp.getDoors());
    } else {
        JOptionPane.showMessageDialog(this, "There are no records");
    }
}
  

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

1. Код без комментария, объясняющего, для чего предназначен код, не очень полезен. Вам нужно сообщить операционной системе, в чем заключалась проблема и почему вы изменили код.

Ответ №2:

 break; 
  

Оператор break приводит к завершению цикла после первой итерации. Вы имели в виду поместить его в блок if-else?

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

1. если я удалю разрыв, только JOptionPane покажет мне объем данных из arraylist, то есть: если в arraylist есть два данных [0] [1] => «Нет записей», «Нет записей».

2. Прошу прощения, я не совсем понимаю, чего вы пытаетесь достичь. Вы пытаетесь сделать так, чтобы при нажатии кнопки отображался предыдущий элемент в списке?

3. Точно, прошу прощения, если я не понял