2016-02-21 51 views
-1

好吧,我可能在做一些愚蠢的事情,但我一直無法弄清楚什麼。我需要創建一個具有初始容量的全局數組,但似乎每當我嘗試時,都會引發一些錯誤。現在,我有:不識別全局陣列

public class Trains { 
private static final int INITIAL = 30; 
private static Integer[] train1, train2, train3, train4, train5, train6 = new Integer[INITIAL]; 
public Trains(){ //constructor 
train2[0] = 4; 
} 
public static void move(){ 
System.out.println(train2[0]); 
} 

當我運行此我得到一個空指針異常,當它試圖輸出TRAIN2 [0]即使我初始化它。我也試過這個:

private static final int INITIAL = 30; 
private static Integer[] train1, train2, train3, train4, train5, train6; 
public Trains(){ //constructor 
    train1, train2, train3, train4, train5, train6 = new Integer[INITIAL]; 
    train2[0] = 4; 
} 

但是,它告訴我train1到train6不能解析爲類型。

當我嘗試設置新的Integer(INITIAL)時,我可能會搞砸一些東西,因爲我以前從來沒有用過這種方式,但是我還沒有找到任何東西來幫助我找出問題所在。

+1

停止不做任何事情,但靜態變量。在你的主體中,創建列車實例(列車列車=新列車()),並在列車實例上調用方法。把所有東西打成主要或靜態是一種可怕的壞模式。 – pczeus

+0

您還需要提供確切的錯誤以及它發生的行。 – pczeus

回答

0

你只是初始化Integer[] train6 = new Integer[INITIAL];

其他國家仍然設置爲null。在設置train2 [0]的值之前,檢查train2是否爲空。

if(train2 == null) 
    train2 = new Integer[INITIAL]; 

train2[0] = 4; 

這是否說清楚了?

P.S.將來,要更具體地說明你的問題到底在哪裏。

0

更換

private static Integer[] train1, train2, train3, train4, 
         train5, train6 = new Integer[INITIAL]; 

private static Integer[] train1 = new Integer[INITIAL]; 
private static Integer[] train2 = new Integer[INITIAL]; 
private static Integer[] train3 = new Integer[INITIAL]; 
// etcetera 

是的,它是冗長,但這是你得到什麼,如果你的代碼是「defactored」用那樣的多個數組變量。

我認爲你應該考慮使用Integer[][],其第一維度是6。這很可能會簡化其他的事情......如果你以正確的方式進行重構。


爲了記錄在案,那爲什麼你的第一次嘗試失敗的原因是

private static Integer[] train1, train2, train3, train4, 
         train5, train6 = new Integer[INITIAL]; 

相當於

private static Integer[] train1; 
private static Integer[] train2; 
// etcetera. 
private static Integer[] train6 = new Integer[INITIAL]; 

這是明確的,如果你看那個Java的語法規則:例如http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.3.2