2014-01-14 78 views
0
public static double[] processUserInput(String data) { 
     String[] arrayInString; 
     double[] arrayInDouble; 
     int length; 

     if(data.contains(",")) { 
      arrayInString = data.split(","); 

      length = arrayInString.length; 

      for(int i = 0; i < length; i++) { 
       arrayInDouble[i] = Double.parseDouble(arrayInString[i]); 
      } 
     } 

     return arrayInDouble; 

    } 

我正在使用Netbeans,編譯器說變量arrayInDouble可能尚未初始化。那是什麼意思?「變量可能未被初始化」是什麼意思?

+0

String [] arrayInString; double [] arrayInDouble; 你還沒有初始化這些數組,「爲什麼你要警告變量可能不被初始化。 – Rahul

+0

當我這樣做'double [] arrayInDouble = new double [] {};'它解決了這個問題,但arrayInString不會抱怨它?! – Joshua

+1

@Joshua唯一一次使用'arrayInString'的時候,'data.contains(「,」)'是真的,在這種情況下,你在使用之前初始化。因此,編譯器可以確保在使用之前初始化該變量。這裏的問題是,如果'data.contains(「,」)'爲false,那麼您在不初始化的情況下使用'arrayInDouble'(但是您不會使用'arrayInString',因此它不會以這種方式抱怨關於那個變量)。 –

回答

1
String[] arrayInString; 

這不是初始化,但你指的是之前提供一個值(arrayInString = data.split(",");),所以沒有抱怨。

double[] arrayInDouble; 

這也是未初始化的。如果輸入不包含逗號,則跳過所有代碼,然後嘗試返回arrayInDouble的值。警告說當您執行return時,arrayInDouble可能沒有值。

0

在使用它們之前,您需要初始化它們(分配一些值)。

+0

當我這樣'double [] arrayInDouble = new double [] {};'它解決了這個問題,但是arrayInString不會抱怨它。這是爲什麼? – Joshua

+0

@Joshua:因爲你在這裏給它賦值'arrayInString = data.split(「,」);' – xyz

0

你還沒有指定任何值,這些變量

String[] arrayInString; 
double[] arrayInDouble; 

這些變量是局部變量所以需要使用,因爲他們不會得到他們的任何默認值之前被初始化。

+0

我想知道我發佈這個答案時所犯的錯誤。 –

+0

我想有人這樣做的樂趣.... :(我的問題是downvoted以及 – Joshua

1

在這種

String[] arrayInString; 
double[] arrayInDouble; 

你只是聲明它們,使用它們之前,你還需要初始化:

String[] arrayInString = new String[length1]; 
double[] arrayInDouble = new double[length2]; 

其中length是數組的長度。

PS:還有其他的方法來初始化它們,例如:

double[] arrayInDouble = {1.1, 2.2}; // The length of the array will be the number of elements in brackets 
+0

有線的事情:'字符串[] arrayInString =新的字符串[3];'它抱怨'從未使用的分配的值'... – Joshua

+0

字符串是一個對象,double是原始的,如果你的數組是java.lang.Double,它將表現出相同的行爲 – hd1

+0

@Joshua這是一個錯誤還是一個警告?如果它是一個警告,它只是意味着你沒有做因爲這只是爲了測試,你可以忽略**警告**。 – Christian