Искать в JFrame - PullRequest
       6

Искать в JFrame

0 голосов
/ 06 марта 2019

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

private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                          
        if(counter< studentList.length){
        String code= txtcode.getText();
        String name= txtname.getText();
        String lastname= txtlastname.getText();
        String rh = comborh.getSelectedItem().toString();
        int age= Integer.parseInt(txtage.getText());

        //the object is created
        Student objStudent = new Student();

        objStudent.setCode(code);
        objStudent.setName(name);
        objStudent.setLastname(lastname);
        objStudent.setAge(age);
        objStudent.setRH(rh);

        studentList[counter] = objStudent;
        counter++;

        JOptionPane.showMessageDialog(this,"n° "+ counter+ " Students.");
        }else{
            JOptionPane.showMessageDialog(this,"Error","Error", JOptionPane.ERROR_MESSAGE);
        }
    }       

информация добавляется без проблем в массив

это условие

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String code= txtcode.getText();   
    String name= txtname.getText();
    String search= JOptionPane.showInputDialog(this,"search by code");

    for (int i = 0; i<=studentList.length;i++){
        if ((search).equals(code)){
             JOptionPane.showMessageDialog(this,"code with the name of: "+name);
        }   
    }                                         
}

1 Ответ

1 голос
/ 06 марта 2019

В методе jButton1ActionPerformed вы хотите проверить, совпадают ли содержимое двух строковых переменных search и code, а не совпадают ли их места в памяти.

Помнитечто Java работает с переменными, которые содержат ссылки на память, если эта переменная содержит ссылочный объект (а экземпляр класса String является ссылочным объектом).Переменные такого типа называются указателями в таких языках, как C, содержимое указателя является адресом памяти.В Java ссылочные переменные не работают для программиста так же, как указатели в C, но за кулисами они точно такие же.Почти все переменные в Java содержат ссылки на память, а не только примитивные типы (примеры примитивных типов: char, int, double, float и т. Д.).

Почему это важно, спросите вы?Хорошо, если вы используете оператор == для ссылочных объектов, вы не проверяете, является ли содержимое двух строк одинаковым, но вы проверяете, является ли ссылка на оба объекта одинаковой.И это принципиально разные сравнения.

Если вы не хотите проверять, имеют ли две строки одинаковое содержимое, вам нужно использовать метод equals(String), который является членом класса String и который сравнивает содержимоедва String-объекта (и это именно то, что мы хотим).

Теперь, зная все это, не удивительно, что строку

if (search == code) {

следует заменить на

if (search.equals(code)) { // which is equivalent to if (code.equals(search)) { 

Если вы хотите узнать больше об указателях (ссылках на память), я настоятельно рекомендую вам сделать это, изучив его, например, прочитав некоторую документацию о языке программирования C.

Youможет также не захотеть больше читать о методе equals класса Object, который переопределяется в классе String.

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