2014-01-14 5 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. Предупреждение говорит, что при выполнении команды returnarrayInDouble может не иметь значения.

0

Перед использованием их необходимо инициализировать (присвоить некоторое значение).

+0

, когда я делаю это 'double [] arrayInDouble = new double [] {};' он исправляет проблему, но arrayInString не жалуется на это. Почему это? – Joshua

+0

@Joshua: Потому что вы назначаете ему значение здесь 'arrayInString = data.split (", ");' – xyz

0

Вы не назначены никакие значения этих переменных

String[] arrayInString; 
double[] arrayInDouble; 

Эти переменные являются локальными переменными, поэтому они должны быть инициализированы перед использованием, поскольку они не получат значения по умолчанию для любого них.

+0

Я хотел бы знать ошибку, которую я совершил, отправляя этот ответ. –

+0

Я предполагаю, что кто-то делает это для удовольствия .... :(мой вопрос также занижен – 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

Проводная вещь: 'String [] arrayInString = new String [3];' он жалуется ', присвоенное значение никогда не использовалось' ... – Joshua

+0

String является объектом, double является примитивным, если вы массив из java.lang.Double он будет демонстрировать то же поведение – hd1

+0

@Joshua Это ошибка? или предупреждение? Если это предупреждение, это просто означает, что вы не делаете что-либо с массивом 'arrayInString', так как это просто для теста, вы можете игнорировать это ** предупреждение **. – Christian

Смежные вопросы