从对象调用方法(Java)

时间:2017-03-15 22:04:32

标签: java object methods

我是新的(ish)java和我制作一个有趣的程序,允许您创建不同的用户,登录这些用户,并做笔记。我被困在用户创建部分。这一行代码不会起作用。我有一个名为userarr的数组,用于保存用户对象。对象内部是用户创建方法。这是一行代码,它接受您输入的用户名和密码的变量,并将其插入到usercreation方法中:

userarr[userarr.length+1] = new user.usercreation(username,password);

它说它无法在课堂内找到usercreation方法。但我不知道如何在对象外部使用usercreation方法,并且能够创建不同的命名对象。

以下是整个班级:

public class TextGame {

    static Scanner scan = new Scanner(System.in);
    class user extends TextGame {
        String username;
        int password;
        String[] notes;
        public void usercreation(String username, int password) {
            this.username = username;
            this.password = password;
        }
        public void login(int password) {
            this.password = password;
            System.out.println("please type the password to proceed.");
            if (scan.nextLine().equals(this.password)) {
                System.out.println("logged in. type 'note' to access notes, or 'logoff' to log off this user.");
            }
        }

    }
    static user[] userarr;

    public static void newuser() {
        System.out.println("\n\nType the username for this user.");
        String username = scan.nextLine();
        System.out.println("Username is now " + username + ". is this what you want? type 'yes' to proceed, or 'no' to enter username again.");
        if (scan.nextLine().equals("no")) {
            newuser();
        }
        else {
            System.out.println("\n\n type the password for this user. (numbers only.)");
            int password = scan.nextInt();
            System.out.println("user is " + username + " and password is " + password + " is this what you want?");
            if (scan.nextLine().equals("no")) {
                newuser();
            } else {
                userarr[userarr.length + 1] = new user.usercreation(username, password);

            }
        }
    }

    public static void main(String[] args) {
        System.out.println("Welcome to LINCOLN COMP console OS. Type 'new' to create a new user, type 'log' to log in to an existing user, or type 'exit' to leave.\nif you are asked a yes or no question, if you type something ether than yes or no, it will default to yes.");
        String ch1 = scan.nextLine();
        switch (ch1) {
        case "new":
            System.out.println("Initializing user creation method:");
            newuser();
            break;
        case "log":

            break;
        case "exit":
            System.out.println("Goodbye!");
            System.exit(0);
            break;
        }
    }

}

4 个答案:

答案 0 :(得分:1)

好的,所以从new user.usercreation(username,password);

开始
  1. usercreation不是user的静态内部类,因此您无法创建它
  2. usercreationuser的一种返回void的方法,因此您不会返回任何内容,因此您无法将其分配给任何内容。
  3. 你可以......

    创建用户实例,应用属性并将其作为单独的操作分配给数组

    user newUser = user();
    newUser.usercreation(username,password);
    userarr[userarr.length+1] = newUser;
    

    同样,你可以让usercreation成为一个工厂方法,但我试图保持简单。

    你可以......

    根据你似乎要做的事情,将usercreation方法变成类构造函数,这会更有意义......

    class user extends TextGame {
        String username;
        int password;
        String[] notes;
    
        public user(String username, int password) {
            this.username=username;
            this.password=password;
        }
    
        public void login(int password) {
            this.password=password;
            System.out.println("please type the password to proceed.");
            if (scan.nextLine().equals(this.password)) {
                System.out.println("logged in. type 'note' to access notes, or 'logoff' to log off this user.");
            }
        }
    
    }
    

    然后你可以做......

    userarr[userarr.length+1] = new user(username,password);
    

    您还没有创建userarr的实例,因此您将点击NullPointerException

    你应该做点像......

    userarr = new user[10];
    

    在尝试使用之前。

    这将允许您维护user类的十个实例。在尝试添加新元素之前,还应检查以确保没有超过数组中可用元素的数量。

    有关详细信息,请查看Arrays Trail

    我建议您查看Code Conventions for Java,以便其他人更轻松地阅读您的代码并让您更轻松地阅读其他人

答案 1 :(得分:0)

在从其他类使用usercreation方法之前,必须首先实例化usercreation类的对象,以便在不同的类中访问它的属性(方法,变量)。

示例:

UserCreation us = new UserCreation(默认构造函数参数);

userarr [userarr.length + 1] = us.usercreation(用户名,密码);

答案 2 :(得分:0)

首先,我想说明你还没有instantiated userarr阵列。所以,我建议先这样做。

其次,new user.usercreation(username,password); usercreation不是user的静态内部类,因此您无法创建它。

第三,usercreation是一种返回void的方法,在这种情况下,您无法将其分配给任何内容。

似乎你想调用这个方法:

public void usercreation(String username, int password) {
      this.username=username;
      this.password=password;
}

要调用该方法,您必须先创建object类型user才能调用它。

示例:

user user1 =  new user();
user1.usercreation(username,password);
userarr[userarr.length+1] = user1;

但是,最简单的方法是让constructor初始化usernamepassword,如下所示:

public user(String username, int password) {
      this.username=username;
      this.password=password;
}

因此您可以轻松地执行此操作:

userarr[userarr.length+1] = new user(username,password);

答案 3 :(得分:0)

你应该使用构造函数:

public user(String username, int password) { // should be named User
    this.username = username;
    this.password = password;
}

然后您可以将用户添加到数组中,如下所示:

userarr[userarr.length+1] = new User("username", 1); // doesn't work!

...除此之外,此代码将失败,因为您没有实例化该数组。即使你有,你也不能像这样给一个数组赋一个元素。数组不会自动重新调整大小,因此当您尝试添加这样的元素时,您将获得ArrayIndexOutOfBoundsException并且您的程序将退出。