这是我的代码:
import java.util.Arrays;
import java.util.Scanner;
public class User
{
private static int [] users;
public User(){
users = new int[10];
Scanner input = new Scanner(System.in);
int InputNumber = input.nextInt();
int length = String.valueOf(InputNumber).length();
我有一个方法可以调用这个方法,但我相信每次我这样做时,它都会创建一个数组,或者我认为它就是这样做的。
这里只是一堆代码,用于进行验证并将数字添加到数组中。
if(length != 8 || InputNumber < 0){
System.out.println("That number isn't valid, try again, the number must have 8 digits");
User menu = new User();
return;
}else{
int i = -1;
do{
i++;
continue;
}while((users[i] != 0 && users[i] == InputNumber) );
if(i == users.length){
System.out.println("There's enough space, delete users");
}else if(users[i] != 0 && users[i] == InputNumber){
System.out.println("That user already exists");
}else{
System.out.println("The user " + InputNumber + " as been added!");
users[i] = InputNumber;
}
//show a menu
}
}
没有任何错误,我可以创建一个用户,但问题是,每次我尝试创建另一个用户时,我认为它看起来像是创建了另一个数组。我想知道的是我可以改变什么来使这项工作成功。
答案 0 :(得分:3)
由于数组字段是静态的,并且每次创建新的 User 对象时都会在构造函数中初始化数组,因此会重新初始化数组并丢失那里的所有信息。
如果您真的需要将该字段设为静态,只需在同一行中启动,如下所示:
private static int [] users = new int[10];
如果你真的想在构造函数中初始化字段,你可以做的其他事情是检查数组是否为空:
if(users == null) {
users = new int[10];
}
答案 1 :(得分:1)
在您的示例中,您只需要初始化数组一次,实际上只初始化一次:
private static final int[] users = new int[10];
答案 2 :(得分:1)
你可以做两件事:
将此代码替换为您的静态行
private static int [] users = new int[10];
并删除构造函数中的初始化
或者你可以在构造函数中检查空引用
if(users == null) users = new int[10];