账户类的登录方法

问题描述 投票:0回答:1

我有一个 acounts 类,它使用用户名创建一个帐户并登录,并将每个用户保存在列表 account_list 中。我在这个类中有一个方法可以登录将logged_in值从false更改为true。目前我无法调用该函数,因为对非静态方法的静态引用或者通常不确定应该如何调用该方法。我必须在这个分支 Account.java 中保存文件:


import java.util.Scanner;

public class Accounts {
    private String username;
    private String password;
    private Boolean logged_in;
    private String account_id;

    private Accounts(String username, String password, Boolean logged_in, String account_id) {
        this.username = username;
        this.password = password;
        this.logged_in = logged_in;
        this.account_id = account_id;
    }

    static Accounts createAccount(Scanner scanner) {
        System.out.println("Username:");
        var username = scanner.nextLine();
        System.out.println("Password:");
        var password = scanner.nextLine();
        return new Accounts(username, password, false, "1");
    }

    public boolean log_in(Scanner scanner) {
        System.out.println("Username:");
        var username = scanner.nextLine();
        System.out.println("Password:");
        var password = scanner.nextLine();
        if (username == this.username && password == this.password) {
            System.out.println("Logged in sucscefully!");
            return this.logged_in = true;

        } else {
            System.out.println("Log in failed!");
            return this.logged_in = false;
        }

    }

    public String toString() {
        return "Username: %s Password: %s".formatted(username, password);
    }

}

和Project.java


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

public class Project {
    private String choice;

    public static void main(String[] args) {
        List<Accounts> account_list = new ArrayList<>();
        try (Scanner scanner = new Scanner(System.in)) {
            System.out.println("Welcome to my password database program");
            boolean done = false;
            while (!done) {
                System.out.println("1. Create account \n2. Log in \n3. View passwords \n4. Log out \n5. Exit program");
                var choice = scanner.nextLine();
                if (choice.equals("1")) {
                    Accounts account = Accounts.createAccount(scanner);
                    account_list.add(account);
                    System.out.println(account);
                }else if (choice.equals("2")){
                    account_list.log_in(scanner)
                    
                }else if (choice.equals("5")) {
                    done = true;

                }
            }
        }
    }

}

我对 java 还很陌生,我坚持在控制台中做所有事情,因为我也在 python 中做相同的程序,并且为了更容易在两种语言之间保持一致,我留在控制台中

我尝试将函数设为静态,但它在调用函数方法时不起作用,因为它是一个类。我尝试过相当不安全地调用 account_list 列表中的对象,期望它在调用特定对象时能够工作,但在使其工作时遇到问题,因为我希望能够同时保存大量帐户。

我的拼写很可能很糟糕,因为我患有阅读障碍,而且不是以英语为母语的人。预先感谢!

java class methods console account
1个回答
0
投票

您当前的代码将无法工作,因为您试图在 ArrayList 本身上调用

log_in
,这不起作用并且没有意义。相反,说实话,我认为您可能想要重新思考并重新编写您的代码。 建议包括:

  • 创建一个 Account 类,其中仅包含 one Account 所需的字段,包括用户名、密码、accountId,可能还包括一个布尔型登录,该类具有构造函数、getters、setters、toString,也许还包括 equals 和 hashCode 方法覆盖。
  • 此类中不应包含任何 UI 代码,例如,不应包含 println 语句,也不应使用 Scanner 对象。
  • 创建一个单独的 Accounts 类,其中包含一个私有字段,
    List<Account> accounts = new ArrayList<>();
  • 为此类提供一个 logIn 方法,该方法采用两个字符串,一个用于用户名,一个用于密码。
  • 为其提供一个帐户字段 currentAccount,该字段在用户登录时设置。
  • 将所有 UI 代码、println 语句和 Scanner 代码放在 Poject 类中。或者更好的是,将其称为 TestAccounts。
© www.soinside.com 2019 - 2024. All rights reserved.