Помогите исправить код чтобы работал правильно -
Определения: (Идет работа с массивом от первого до последнего поля)
Массив -
Резко падает = 88,55,33,22,1; (может быть массив в два поля = 1,4);
Резко возрастает = 1,15,33,44; (может быть массив в два поля = 5,2);
Монотонно возрастает = 1,3,15,15,33,55;
Монотонно падает = 88,55,33,33,22,1;
Задание:
if toschka == true && vvod == резко возрастает, End = true;
if toshka == false && vvod == резко падает, End = true;
if (toschka == false || toschka == true) && (vvod == null || vvod.length == 0), End = false;
if (toschka == false || toschka == true) && vvod.length == 1, End = true;
Мой код, где я накосячил?
public static boolean End(int[] vvod, boolean toschka) {
boolean Otvet = false;
boolean dvoinoeVosvr = false;
boolean vozvrastanie = false;
int a = 0;
while (a < vvod.length) {//Pruef ob monoton steigend
for (int j = 0; j < vvod.length; j++)
for (int k = j + 1; k < vvod.length; k++) {
if (k != j && vvod[k] == vvod[j]) {
dvoinoeVosvr = true;
break;
}
}
for (int i = 0; i < vvod.length - 1; i++) {
if (vvod[i] > vvod[i + 1]) {
vozvrastanie = false;
break;
} else {
vozvrastanie = true;
break;
}
}
a++;
}
if (vvod == null && vvod.length == 0) {
Otvet = false;
} else if (vvod.length == 1){
Otvet = true;
} else if (toschka == true && vozvrastanie == true){
Otvet = true;
} else if (toschka == false && vozvrastanie == false) {
Otvet = true;
}
return Otvet;
}
}
На скриншоте изменены названия метода и переменных метода, код тот же самый
В Вашем коде шесть вариантов, когда функция ничего не возвращает, и один - когда что-то возвращает. С этим надо что-то делать. Еще очень мило выглядит проверка параметра на null
после долгих манипуляций с этим параметром.
Уберите эти условия отовсюду:
toschka == true || toschka == false
С условиями стоит поработать. Во-первых, в условии задачи чётко не определено - значения в массивах обязательно возрастают или убывают, или могут произвольно меняться как в сторону увеличения, так и в сторону уменьшения.
Во втором случае нужно пройтись в цикле и убедиться, что значения меняются в одну сторону на всей протяжённости. Поскольку это не оговорено, будем использовать упрощённый вариант.
Так же чётко не задано условие двойного возрастания. Из кода предположу, что это когда каждое последующее число другое.
В профессии программиста это важно: 1. запросить все условия. 2. не делать больше чем просят.
Проверку
if (vvod == null && vvod.length == 0) {
Otvet = false;
} else if (vvod.length == 1){
Otvet = true;
}
Надо перенести в начало метода в таком виде:
if (vvod == null || vvod.length == 0) {
return false;
} else if (vvod.length == 1){
return true;
}
Условие здесь стоит поправить. Сейчас вторая проверка свалится с NullPounterException. Если перевести это условие на русский язык: "если ввод равен налл, и его длина равна нулю".
if (vvod == null && vvod.length == 0) {
Правильное решение:
if (vvod == null || vvod.length == 0) {
"если ввод равен налл, или его длина равна нулю". В случае, если первое условие == true - второе проверяться уже не будет.
Циклы.
Тут всё плохо. Один лишний цикл, ненужные проверки, ненужная переменная. Дешевле переписать код:
public static boolean end(int[] vvod, boolean toschka) {
// (vvod == null || vvod.length == 0), End = false;
// vvod.length == 1, End = true;
if (vvod == null || vvod.length == 0) {
return false;
} else if (vvod.length == 1) {
return true;
}
// смотрим, есть у нас двойное изменение или нет.
boolean doubleIncr = true;
for (int i = 0; i < vvod.length - 1; i++) {
if (vvod[i] == vvod[i + 1]) {
doubleIncr = false;
break;
}
}
//если монотонное - возвращаем false
if (!doubleIncr) {
return false;
}
// Если первый элемент массива меньше последнего - значит возрастает
boolean increase = vvod[0] < vvod[vvod.length - 1];
// if toschka == true && vvod == резко возрастает, End = true;
//if toshka == false && vvod == резко падает, End = true;
if ((toschka && increase) || (!toschka && !increase)) {
return true;
} else {
return false;
}
// кстати, последние проверки можно упростить до:
// return (toschka && increase) || (!toschka && !increase);
}
Тесты для проверки:
@Test
void endTest() {
assertFalse(end(new int[]{}, false));
assertFalse(end(new int[]{}, true));
assertTrue(end(new int[]{0}, false));
assertTrue(end(new int[]{0}, true));
assertFalse(end(new int[]{1,2}, false));
assertTrue(end(new int[]{2,1}, false));
assertTrue(end(new int[]{1,2}, true));
assertFalse(end(new int[]{2,1}, true));
assertFalse(end(new int[]{1,2,2}, false));
assertFalse(end(new int[]{2,1,1}, true));
assertFalse(end(new int[]{1,2,2}, false));
assertFalse(end(new int[]{2,1,1}, true));
}
Так же советую называть переменные и методы с маленькой буквы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Установила Oracle11g, настроила подключение в идее - все окНо в итоге выдает такую ошибку:
Хотел бы поинтересоваться, как добавлять данные в связанные таблицы одним запросомНа рисунке изображена схема БД
На сайте на разных страницах должен выводиться контент, редактируемый из админкиИ контент по своей структуре разный: на некоторых страницах...