You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:15:03