Java 有没有办法只启动一次阵列?

Java 有没有办法只启动一次阵列?,java,arrays,Java,Arrays,这是我的密码: 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 InputNumb

这是我的密码:

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
      }
    } 

没有任何错误,我可以创建一个用户,但问题是,每次我尝试创建另一个用户时,我认为它似乎创建了另一个数组。我想知道的是,我可以更改什么使其工作。

以您的示例为例,您所需要的只是初始化数组一次,实际上只初始化它一次:


私有静态最终int[]用户=新int[10]

在您的示例中,只需初始化一次数组,实际上只需初始化一次:

私有静态最终int[]用户=新int[10]

你可以做两件事:

为静态行替换此代码 私有静态int[]用户=新int[10]; 并删除构造函数中的初始化

或者您可以在构造函数中检查空引用 ifusers==null users=newint[10]

你可以做两件事:

为静态行替换此代码 私有静态int[]用户=新int[10]; 并删除构造函数中的初始化

或者您可以在构造函数中检查空引用 ifusers==null users=newint[10]


由于数组字段是静态的,并且每次创建新的用户对象时都会在构造函数中初始化数组,因此会重新初始化数组并丢失其中的所有信息

如果您真的需要静态字段,只需在同一行中启动,如下所示:

private static int [] users = new int[10];
如果确实要初始化构造函数中的字段,可以做的另一件事是检查数组是否为null:

if(users == null) {
    users = new int[10];
}

由于数组字段是静态的,并且每次创建新的用户对象时都会在构造函数中初始化数组,因此会重新初始化数组并丢失其中的所有信息

如果您真的需要静态字段,只需在同一行中启动,如下所示:

private static int [] users = new int[10];
如果确实要初始化构造函数中的字段,可以做的另一件事是检查数组是否为null:

if(users == null) {
    users = new int[10];
}

用户菜单=新用户是递归的,不是您想要的。你应该把逻辑分解成方法。不要将所有内容都放入无参数构造函数中。从技术上讲,您可以添加另一个静态变量,如private static boolean initialized=false;,只有当它为false时才进行初始化,然后将其设置为true。然而,这是一个非常有问题的设计,如果您想从构造函数初始化它,为什么该字段是静态的?这段代码需要认真重构,我认为您可以通过创建新用户返回菜单,但这不是一个好主意。User menu=新用户是递归的,而不是您想要的。你应该把逻辑分解成方法。不要将所有内容都放入无参数构造函数中。从技术上讲,您可以添加另一个静态变量,如private static boolean initialized=false;,只有当它为false时才进行初始化,然后将其设置为true。然而,这是一个非常有问题的设计,如果你想从构造函数中初始化它,为什么这个字段是静态的?这段代码需要认真的重构,我认为你可以通过创建新用户返回菜单,但这不是一个好主意。就是这样,谢谢,它起作用了。就是这样,谢谢,它起作用了。