Компилятор выдаёт ошибку:
переменные indexMin и indexMax могут быть не определены
Хотя механизм их определения, хоть и записан внутри if, но срабатывает при любом варианте заполнения массива. Как исправить?
/**
*
* my third homework
*
*/
import java.util.*;
import java.lang.*;
import java.io.*;
public class Main {
public static void main(String[]args) {
// генерация массива
int[] MyArr = new int[15];
for(int i = 0; i< MyArr.length; i++) {
MyArr[i] = (int) Math.round((Math.random() * 30) - 15);
System.out.println(MyArr[i]);
}
int s = 0; // начало области
int f = MyArr.length - 1; //конец области
int indexMin, indexMax; // тут будут хранится индексы минимального и максимального значения в области
int min = 16, max = -16;
while (s<= f && f>= s) {
// поиск наим и наиб значений в области и запись их индексов
for(int i = 0; i< MyArr.length; i++) {
if(MyArr[i] < min) {
min = MyArr[i];
indexMin = i;
}
if(MyArr[i] > max) {
max = MyArr[i];
indexMax = i;
}
}
// перестановка занчений в начало и конец области
MyArr[indexMin] = MyArr[s];
MyArr[s] = min;
MyArr[indexMax] = MyArr[f];
MyArr[f] = max;
// сброс значений минимума и максимума для поиска в новой области (этого можно и не делать, т.к. первый и последний элементы массива уже минимальный и максимальный, просто перестраховка)
min = 16;
max = -16;
// сужение области
s++;
f--;
}
System.out.println("после сортировки:");
for(int i = 0; i< MyArr.length; i++) {
System.out.println(MyArr[i]);
}
}
}
Задайте начальное значение ваших indexMin и indexMax тут:
int indexMin, indexMax;
Хоть они и будут равны 0, т.к. вы сами явно не прописали значения, компилятор будет вам подсказывать, что ваши переменные могут быть не проинициаллизирлваны, из-за if.
Если каждое значение вашего массива будет >= 16 или каждое значение будет <= -16, то одна из переменных у вас будет не инициализирована гарантировано.
От того что вы их проинициализируете нулевым значением ничего плохого не произойдет - внутри цикла ваша логика быстро сменит им значения на нужные.
Компилятор не отслеживает возможные варианты исполнения вашего кода. Если переменная инициализируется внутри условного оператора, а потом используется вне этого оператора, то компилятор предполагает, что условие может оказаться как истинным, так и ложным, а значит, при каких-то условиях переменная может оказаться неинициализированной. Использование неинициализированных локальных переменных в java
запрещено, поэтому компилятор такой код не откомпилирует. Переменные экземпляра и переменные класса (т. е. описанные не внутри метода) по умолчанию приобретают нулевые значения, и их можно использовать без явной инициализации, но к локальным переменным (т.е. описанным внутри методов) это не относится, они всегда должны быть инициализованы явно. Так что присвойте им какие-нибудь начальные значения, напр.
int indexMin = Integer.MAX_VALUE, indexMax = Integer.MIN_VALUE;
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот в чем вопрос: хочу вывести iFrame с обзором pdf, написал сервлет который отвечает за высылку информации (так как сам pdf находится не в папке...
У меня есть кнопка которая делает скриншотКак сделать какой-то эффект, чтобы было понятно ,что скриншот сделан