Массив, возрастающая последовательность
Всем доброго времени суток, подскажите почему мой код не работает?
Нужно проверить является ли массив возрастающей последовательностью, я написал такой код:
boolean sequence = false;
String rus;
for (int i = 0; i < array.length; i++) {
if (array[i] < array[i + 1]) {
sequence = true;
} else {
sequence = false;
}
}
if (sequence == false) {
rus = "Нет";
} else {
rus = "Да";
}
System.out.println("Является ли массив возрастающей последовательностью? " + rus);
Ответы (2 шт):
В некоторых случаях может возникнуть ошибка java.lang.ArrayIndexOutOfBoundsException в условии array[i] < array[i + 1].
Можно сделать как-то так:
int[] array =
new int[]{1,2,3,4,5,6};
boolean sequence = true;
for (int i = 0; i < array.length; i++) {
if (i > 0 && array[i] < array[i - 1]) {
sequence = false;
break;
}
}
String rus;
if (sequence) {
rus = "Да";
} else {
rus = "Нет";
}
System.out.println("Является ли массив возрастающей последовательностью? " + rus);
Для начала, удивительно, что он не вылетает с ошибкой "Выход за границы массива", но ваша проблема не в этом. Флаг sequence становится истинным каждый раз, когда какой-то элемент массива меньше следующего. То есть, если конец массива - возрастающая последовательность, то sequence == true.
Чтобы исправить данную ошибку, нужно понять, что если хоть какой-то элемент массива не меньше, чем следующий, то условие строгого возрастания последовательности уже не выполняется, а поэтому нужно просто выйти из цикла в этот момент:
boolean flag = true;
for (int i = 0; i < array.length - 1; i++)
{
if (a[i] < a[i + 1])
flag = true;
else
{
flag = false;
break;
}
}
Но лучше сократить этот код следующим образом:
boolean flag = true;
for (int i = 0; i < array.length - 1; i++)
{
if (a[i] >= a[i + 1])
{
flag = false;
break;
}
}