首页 > 解决方案 > 在 JFrame 中搜索

问题描述

我将一个小型 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);
        }   
    }                                         
}

标签: javaarraysswingsearch

解决方案


在该方法中jButton1ActionPerformed,您要检查两个字符串变量的内容是否search相同code,而不是它们在内存中的位置是否相同。

String请记住,如果该变量包含一个引用对象(并且该类的一个实例是一个引用对象),那么 Java 会使用包含对内存的引用的变量。这类变量在 C 等语言中称为指针,指针的内容是内存地址。在 Java 中,引用变量对程序员的工作方式与 C 中的指针不同,但在幕后,它们是完全相同的。Java 中几乎所有的变量都持有对内存的引用,只有原始类型没有(原始类型的示例:char、int、double、float 等)。

您可能会问为什么这很重要?好吧,如果您在引用对象上使用 == 运算符,您不是在检查两个字符串的内容是否相同,而是在检查对两个对象的引用是否相同。这些是根本不同的比较。

如果您不想检查两个字符串是否具有相同的内容,则需要使用equals(String)String 类的成员方法来比较两个字符串对象的内容(这正是我们想要的)。

现在,知道了这一切,这条线就不足为奇了

if (search == code) {

应该替换为

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

如果你想了解更多关于指针(对内存的引用)的信息,我真的鼓励你通过研究它来做到这一点,例如阅读一些关于编程语言 C 的文档。

您可能也不想阅读更多关于在类 String 中覆盖的类 Object 的 equals 方法。


推荐阅读