2015-11-26 3 views
1

Я видел подобные вопросы здесь, и мне жаль, если это похоже на дубликат, но ответ на подобные вопросы просто мне не помог. Итак, у меня есть метод, который является частью класса. Вот он:Переменная Java не инициализируется

public int min_value() 
    { 
     int min; 

     for (int i = 0;i < size - 1;i++) 
     { 
      min = numbers[i]; 
      for (int k = 1;k < size; k++) 
      { 
       if (numbers[k] < min) 
       { 
        min = numbers[k]; 
       } 
       else 
       { 
        min = numbers[i]; 
       } 
      } 
     } 

     return min; 
    } 

Ошибка говорит, что переменная min может не быть инициализирована. Я не понимаю, как это может быть правдой. Я чувствую, что нет никакой возможности, чтобы переменная не была инициализирована из циклов for. Пожалуйста помоги. Благодаря!

+3

Представьте себе 'размер' -56 – zapl

ответ

2

Вот как метод min_value() кажется, компилятор:

public int min_value() 
{ 
    int min; 

    // for blocks 

    return min; 
} 

ПОЧЕМУ части: Представьте себе, если размер был равен 1: для блоков кода циклов никогда не будет выполнено. Так как вы манипулируете переменную min в forблоков (циклах), компилятор предполагает, что выполнение потока не может входить эти петли, поэтому предполагается, что это переменная не может бытьинициализируются. Это не было бы проблемой, если бы вы установили min в качестве переменной-члена класса (Так как переменные-члены заданы значениями по умолчанию для компилятора), но здесь это не так. (A корпус метода)

+0

отличный ответ. спасибо за четкое и подробное объяснение. –

+0

Добро пожаловать. –

1

Изменение int min; в int min = 0;

И вы будете иметь мин инициализирован.

Edit:

ошибка исходит из того, что если size = 1, ваш цикл никогда не будет выполнен, следовательно, мин никогда не будет иметь значение. Вы не можете вернуть неинициализированное значение, поэтому вы получили ошибку.

1

Если размер 1 или меньше, минимальный не будет инициализирован!

1

Ну, в случае, если я не меньше, то size - 1 вы вернетесь как минимум.
В этом случае Min не был инициализирован, и вы вернете его, откуда произошла ошибка.

Just put: int min = 0 в начале, все будет хорошо.
Кроме того, вы можете сделать:

min = numbers[0]