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

时间:2021-01-03 16:10:09

标签: 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 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
      }
    } 

没有任何错误,我可以创建一个用户,但问题是,每次我尝试创建另一个用户时,我认为它看起来像是创建了另一个数组。我想知道的是我可以改变什么来使这项工作成功。

3 个答案:

答案 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)

你可以做两件事:

  1. 将此代码替换为您的静态行 private static int [] users = new int[10]; 并删除构造函数中的初始化

  2. 或者你可以在构造函数中检查空引用 if(users == null) users = new int[10];

相关问题