我是新的(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;
}
}
}
答案 0 :(得分:1)
好的,所以从new user.usercreation(username,password);
usercreation
不是user
的静态内部类,因此您无法创建它usercreation
是user
的一种返回void
的方法,因此您不会返回任何内容,因此您无法将其分配给任何内容。创建用户实例,应用属性并将其作为单独的操作分配给数组
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
初始化username
和password
,如下所示:
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
并且您的程序将退出。