2016-12-30 72 views
0

我是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開始編寫代碼,你會知道你擔心的事情很少是真正的問題。在你的情況下,你應該簡單地聲明+初始化它使用的地方的局部變量。你試圖做的通常會創建難以複審的代碼 –

回答

3

數組的大小是固定的,所以稍後您將創建一個新的數組(即,您的初始值可以是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'的可能性,它使編譯器無法在編譯時告訴您何時錯誤地使用了未初始化的變量,以便您可以儘早解決該問題,並且增加了醜陋性。 –

-2
//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]'對象,所以你可能會也沒有初始化它。 –

-2

我的目標是在在聲明所有變量的時候初始化數組,然後在程序中稍後設置值(原因是我希望保持代碼清潔,即我不想同時初始化和設置值。 )

在上面初始化數組甚至更好,特別是在處理這種情況時。

這是Java初始化數組的正確的方法:

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