【问题标题】:How can I create a reference to an object in my main function (given the user input) (Java)?如何在我的主函数中创建对对象的引用(给定用户输入)(Java)?
【发布时间】:2021-12-31 16:01:51
【问题描述】:

我正在创建一个 Usuario 类,它存储在另一个名为 Usuarios 的类中的 ArrayList 中,我正在尝试制作一个代码,允许用户输入他的姓名和类的对象Usuario 存储在一个名为 usuario_logado 的变量中,以备不时之需。

这是我的Usuarios 课程:

import java.util.ArrayList; 
public class Usuarios {
    private static ArrayList<Usuario> UsersList = new ArrayList<Usuario>();

    public static ArrayList<Usuario> getUsuarios(){
        return Usuarios.UsersList;
    }

    public static void addUser(Usuario u){
        UsersList.add(u);
    } 
}

这是我的Usuario 课程:

import java.util.ArrayList; 
/**
 * Usuario
 */
public class Usuario {

    private static int indexes = 0;
    private int index;
    private String nome;
    private String email;

    public Usuario(){
    }
    
    public Usuario(String nome, String email){
       
        this.nome = nome;
        this.email = email;
        Usuarios.addUser(this);
        this.index = indexes;
        indexes++;
    }
    public String getNome(){
        return nome;
    }

    public String getEmail(){
        return email;
    }

    public int getIndex(){
        return index;
    }

    public String getString(){
        return "Nome : " + this.nome + " E-mail : " + this.email + " index:" + this.index; 
    }
}

这是类应用程序中的主要功能:

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");
       
        Usuario usuario_logado = new Usuario();

        Scanner input = new Scanner(System.in);

        System.out.print("Login \n Username :");
        String nome = input.next();

        for(Usuario user : Usuarios.getUsuarios()){
            if(user.getNome().equals(nome)){
                usuario_logado = user;
            }
        }
        usuario_logado.getString(); 
    }
}

有什么方法可以将 usuario(user) 存储在主函数中?

【问题讨论】:

  • 从您的班级Usuarios 中删除所有statics,在您的main 中创建Usuarios 的实例,并为您的每个Usuario 实例调用addUser。此外,您在问“如何在我的主函数中创建对对象的引用”,但您已经在创建其他对象的实例。 Usuarios 类也不例外。

标签: java class object


【解决方案1】:

您需要对代码进行几处更改。首先,去掉Usuarios中的静态变量,使其成为实例变量:

import java.util.ArrayList;
import java.util.List;

public class Usuarios {
    private List<Usuario> usersList = new ArrayList<>();

    public List<Usuario> getUsuarios(){
        return usersList;
    }

    public void addUser(Usuario u){
        usersList.add(u);
    }
}

另外,删除Usuario中的Usuarios.addUser(this);行如下:

public class Usuario {

    private static int indexes = 0;
    private int index;
    private String nome;
    private String email;

    public Usuario(){
    }

    public Usuario(String nome, String email){
        this.nome = nome;
        this.email = email;
        this.index = indexes;
        indexes++;
    }
    public String getNome(){
        return nome;
    }

    public String getEmail(){
        return email;
    }

    public int getIndex(){
        return index;
    }

    public String getString(){
        return "Nome : " + this.nome + " E-mail : " + this.email + " index:" + this.index;
    }
}

最后,最重要的是,更改您的主类,以便创建Usuarios 的实例,并将您创建的每个Usuario 添加到该Usuarios 实例,如下所示:

import java.util.*;

public class App {
    public static void main(String[] args) {
        Usuarios users = new Usuarios();
        Usuario user0 = new Usuario("None", "None");
        users.addUser(user0);
        Usuario user1 = new Usuario("Thomas", "anotheremail@hotmail.com");
        users.addUser(user1);
        Usuario user2 = new Usuario("juao", "juaozinhogeimepleis@hotmail.com");
        users.addUser(user2);
        Usuario user3 = new Usuario("marcia", "jooj@hotmail.com");
        users.addUser(user3);
        Usuario user4 = new Usuario("Ednaldo", "valenada@hotmail.com");
        users.addUser(user4);
        Usuario user5 = new Usuario("Fausto", "olokobixo@hotmail.com");
        users.addUser(user5);

        Usuario usuario_logado = new Usuario();

        Scanner input = new Scanner(System.in);

        System.out.print("Login \n Username :");
        String nome = input.next();

        for(Usuario user : users.getUsuarios()){
            if(user.getNome().equals(nome)){
                usuario_logado = user;
            }
        }
        System.out.println(usuario_logado.getString());
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 2017-10-21
    • 2016-11-03
    • 2021-11-18
    • 2017-09-11
    相关资源
    最近更新 更多