Java中如何在main函数中引用存储于ArrayList的Usuario对象
解决方案
你的代码核心逻辑已经实现了匹配存储的功能,调整以下几个问题即可正常运行:
现存问题说明
- 匹配逻辑没有提前终止:如果存在重名用户会默认存储最后一个匹配的对象,同时会产生多余的全列表遍历
- 未处理无匹配的场景:你初始化
usuario_logado时用了无参构造的空Usuario对象,当输入姓名没有匹配项时,这个空对象所有属性都是默认值,后续调用会出现预期外的结果 - 你调用了
usuario_logado.getString()但没有做打印输出,所以看不到验证结果
修改后的main函数代码
import java.util.ArrayList; import java.util.Scanner; public class App { public static void main(String[] args) { Usuario user0 = new Usuario("None", "None"); Usuario user1 = new Usuario("Thomas", "anotheremail@hotmail.com"); Usuario user2 = new Usuario("juao", "juaozinhogeimepleis@hotmail.com"); Usuario user3 = new Usuario("marcia", "jooj@hotmail.com"); Usuario user4 = new Usuario("Ednaldo", "valenada@hotmail.com"); Usuario user5 = new Usuario("Fausto", "olokobixo@hotmail.com"); // 初始赋值为null,方便后续判断是否匹配到有效用户 Usuario usuario_logado = null; Scanner input = new Scanner(System.in); System.out.print("Login \n Username :"); String nome = input.next(); input.close(); // 用完关闭输入流避免资源泄漏 for(Usuario user : Usuarios.getUsuarios()){ if(user.getNome().equals(nome)){ usuario_logado = user; break; // 匹配到直接终止遍历,节省性能也避免重名覆盖问题 } } // 先判断是否匹配到再做后续操作 if(usuario_logado != null) { System.out.println("登陆成功,用户信息:" + usuario_logado.getString()); // 后续可以正常使用usuario_logado变量做其他业务逻辑 } else { System.out.println("未找到匹配的用户,请检查输入的姓名"); } } }
额外优化建议
如果后续用户量比较大,还可以把Usuarios类里的存储结构从ArrayList换成HashMap<String, Usuario>,以姓名为key直接查找,时间复杂度从O(n)降到O(1),查询效率更高。
内容的提问来源于stack exchange,提问作者thomasmelison
相关产品推荐
相关产品推荐

