稍后在程序中设置数组的值

问题描述:

我是JAVA的初学者,刚刚开始学习这门语言。我在How to initialize an array in Java?研究线程,但无法真正找到解决方案。稍后在程序中设置数组的值

我的目标是在声明所有变量时初始化数组,然后在程序中稍后设置值(原因是我想让我的代码保持干净,即我不想初始化并且)。具体来说,我不想同时声明和设置值,但是在不同的时间。

public class AutoArray { 
    public static void main(String[] args) { 
     //Option 1 
     int[] Array1 = new int[4]; //Declare 
     Array1[0] = 3; //Set individual elements. Fine but repetitive. 
     Array1[1] = 4; 
     Array1[2] = 5; 
     Array1[3] = 6; 
     System.out.println("Array1 is:"+Array1); 
     //Option 2 
     int Array3[] = {3,4,5,6}; //Declare and set at the same time. Not good. 
     System.out.println("Array3 is:"+Array3); 
     //Option 3 
     int Array5[] = new int[3]; 
     Array5[] = {3,5,11}; //Won't compile 
    } 
} 

正如我们可以看到上面,我可以(选项1)的阵列的设定各个元件使用Array[i] = XYZ其中i<4或(在:

这是我的代码与从SO线程上面了解到不同的选项选项2)在声明数组时设置值。

但是,我想做一些我在选项3中尝试的东西 - 稍后使用大括号设置值。我不想重复设置单个元素的代码,因为它看起来很笨重,或者不能使用for循环,因为这些值不符合模式。

有什么我可以做的吗?我会很感激任何想法。

+0

你从哪里得到这样的想法,即同时声明和初始化变量不是干净的代码?将所有东西保存在一个地方尽可能干净。 –

+0

@Kevin Krumwiede - 感谢您的提问。我认为它不是干净的,因为假设你有50个变量,并且你在不同的文件中创建了一个函数(我已经从C过渡到Java,所以我不相当于JAVA中的函数或方法)来声明这些变量。我认为代码审查人员在声明部分和使用(设置)部分之间来回访问不是一个好的经验。对?我是JAVA世界的新手,所以我不确定处理这个问题的最佳方法。我会很感激你的想法。 – watchtower

+0

@watchtower开始编写代码,你会知道你担心的事情很少是真正的问题。在你的情况下,你应该简单地声明+初始化它使用的地方的局部变量。你试图做的通常会创建难以复审的代码 –

数组的大小是固定的,所以稍后您将创建一个新的数组(即,您的初始值可以是null)。接下来,你在这里看语法糖

int Array3[] = { 3, 4, 5, 6 }; 

相当于(和较短的形式是只允许在声明)

int Array3[] = new int[] { 3, 4, 5, 6 }; 

所以,你可以

int Array5[] = null; 
Array5 = new int[] { 3, 5, 11 }; 
+0

将变量初始化为'null'几乎总是一个坏主意。对于大多数情况,它不必要地引入了'NullPointerException'的可能性,它使编译器无法在编译时告诉您何时错误地使用了未初始化的变量,以便您可以尽早解决该问题,并且增加了丑陋性。 –

//Option 3 
int Array5[] = new int[3];//Array5 to be an object. 
Array5[] = {3,5,11}; //after this ,Array5 become another object. 
//'{3,5,11}' means 'new int[]{3,5,11}' 
+0

这段代码没有编译,即使你修正了语法,当你使用另一个'new int [] {3,5,11}'时,它会抛弃原来的'new int [3]'对象,所以你可能会也没有初始化它。 –

我的目标是在在声明所有变量的时候初始化数组,然后在程序中稍后设置值(原因是我希望保持代码清洁,即我不想同时初始化和设置值。 )

在上面初始化数组甚至更好,特别是在处理这种情况时。

这是Java初始化数组的正确的方法:

INT []数据=新INT [] {10,20,30,40,50,60,71,80,90,100};