java - 在 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);
}
}
}
解决方案
在该方法中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 方法。
推荐阅读
- python - 通过布尔索引创建新列,同时使用两个不同大小和索引的数组
- docker - 从私有 nuget 源恢复 nuget 包 - Docker 给出错误
- list - TypeError:无法转换类型的对象
到张量。内容:[无,-1, 3]。考虑将元素转换为支持的类型 - javascript - 按钮没有响应.. JavaScript 没有扩展
- cygwin - cygwin中gnome应用程序的URL处理程序?
- unity3d - 对象边缘的白线。Oculus Quest (android) 的 Unity 项目
- excel - 日期范围的 CountIfs 对于高于的日期返回 0
- amazon-web-services - Aws cli 命令替换
- flutter - 我需要做这个布局,但我很困惑我应该用什么来放置它们,就像我在下面发布的图片中一样
- java - Spring Boot 自定义 HTTP 异常