2012-05-17 6 views
1

Я следующий код программы преобразования:Возможно, переменная не была инициализирована?

private void convertButtonActionPerformed(java.awt.event.ActionEvent evt) { 

    int type, value; 
    double conversion; 
    String output; 

    type = Integer.parseInt(conversionchoiceInput.getText()); 
    value = Integer.parseInt(valueInput.getText()); 

    if (type == 1) 
    { 
    conversion = inchesToCentimetres(value); 
    output = value + " inches = " + Math.round(conversion) + " centimetres"; 
    } 
    else if (type == 2) 
    { 

    } 
    else if (type == 3) 
    { 

    } 
    else if (type == 4) 
    { 

    } 
    outputLabel.setText(output); 
} 

Это говорит «выходная переменная может не быть initiaized», когда у меня уже есть?

Спасибо!

+0

Когда вы пишете 'String output;' вы _declaring_ 'output'. Когда вы пишете 'String output =" ";' (или любое значение. "" Всего лишь пример), вы _initialising_ it. – Tharwen

+0

В общем, это плохая идея разделить объявление и инициализацию переменных (тип, значение). Объявите их при инициализации, если это возможно. При необходимости разделите их только (до попытки/catch-block, например). –

ответ

4

Проблема заключается в том, что необходимо инициализировать output независимо от того, какой путь выполнения выполняет программа. Он инициализируется только в пути if. Поэтому вам нужно указать значение по умолчанию в начале (пустой строки или что-то еще) или установить его во всех ветвях.

String output = ""; 

или

if (type == 1) 
{ 
    conversion = inchesToCentimetres(value); 
    output = value + " inches = " + Math.round(conversion) + " centimetres"; 
} 
else if (type == 2) 
{ 
    output = ""; 
} 
else if (type == 3) 
{ 
    output = ""; 
} 
else if (type == 4) 
{ 
    output = ""; 
} 

Естественно, первый вариант является лучшим.

+0

вы также можете инициализировать его с наиболее распространенным значением, так что вам не нужно проверять наиболее распространенный параметр в инструкции if, просто проверьте остальные. –

0

Если тип! = 1, то вывод не инициализируется. И даже если вы даете вывод, значение в каждом из ветвей if (1, 2, 3, 4) может быть не инициализировано, как если бы тип < 1 или> 4 он по-прежнему не имеет значения.

0

Вы только что указали переменную там, которая отличается от ее инициализации.

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