Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2017, 16:03   #1
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию Упорядоченный массив (найти ошибку в коде на Java)

Понимаю, что тут какая-то глупая ошибка, но не знаю как исправить, вот мой код (нужно определить упорядочен ли массив):

Код:
int[] arr = {8,1,0,9,4,3}; 
 
        for (int i = 0; i < arr.length -1; i++) 
    if (arr[i] <= arr[i + 1]) 
             System.out.println("Массив упорядочен(по возрастанию)");
    else if (arr[i] >= arr[i+1])
             System.out.println("Массив упорядочен (по убыванию)");
    else
              System.out.println("Массив не упорядочен");
Выводит это:
Массив упорядочен (по убыванию)
Массив упорядочен (по убыванию)
Массив упорядочен(по возрастанию)
Массив упорядочен (по убыванию)
Массив упорядочен (по убыванию)

_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 10.10.2017 в 16:25.
igra17 вне форума Ответить с цитированием
Старый 10.10.2017, 16:14   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

а что должен вывести?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.10.2017, 16:18   #3
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию


Последний раз редактировалось igra17; 10.10.2017 в 16:24.
igra17 вне форума Ответить с цитированием
Старый 10.10.2017, 16:21   #4
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
а что должен вывести?
здесь он сравнивает каждый элемент со следующим и сразу выдает результат, а нужно, чтобы он пробегался по всему массиву и выдал 1 общий результат. т.е. в данном случае- массив не упорядочен
igra17 вне форума Ответить с цитированием
Старый 10.10.2017, 16:24   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
        int[] arr = {1,3,2,4,5};
        int len = arr.length-1;
        int c = 0;
        for (int i = 0; i < arr.length-1; i++) 
        {
            if (arr[i] < arr[i + 1]) c++;
            else if (arr[i] > arr[i+1]) c--;    
            if (arr[i]==arr[i+1]) len--;
        }
        if (c == len)
            System.out.println("Массив упорядочен(по возрастанию)");
        else if (-c==len)
            System.out.println("Массив упорядочен (по убыванию)");
        else
            System.out.println("Массив не упорядочен");
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 10.10.2017, 16:28   #6
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Код:
        int[] arr = {1,3,2,4,5};
        int len = arr.length-1;
        int c = 0;
        for (int i = 0; i < arr.length-1; i++) 
        {
            if (arr[i] < arr[i + 1]) c++;
            else if (arr[i] > arr[i+1]) c--;    
            if (arr[i]==arr[i+1]) len--;
        }
        if (c == len)
            System.out.println("Массив упорядочен(по возрастанию)");
        else if (-c==len)
            System.out.println("Массив упорядочен (по убыванию)");
        else
            System.out.println("Массив не упорядочен");
у меня был вот такой код, очень похож на ваш, но преподаватель сказал, что необходимо сделать как-то по-другому:
Код:
int[] arr = {8,1,0,9,4,3}; 
        int f= 0;
 
        for (int i = 0; i < arr.length -1; i++) {
            if (arr[i] <= arr[i + 1]) 
               f++;
            else
               f--;
        }
 
        if((f == arr.length - 1)&&(arr[0] <= arr[arr.length - 1]))
            System.out.println("Массив упорядочен(по возрастанию)");
        else if((f == -(arr.length - 1))&&(arr[0] >= arr[arr.length - 1]))
            System.out.println("Массив упорядочен (по убыванию)");
        else
            System.out.println("Массив не упорядочен");
igra17 вне форума Ответить с цитированием
Старый 10.10.2017, 16:33   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

нужно завести переменную и в цикле обращаться с ней.

например, примерно так:

Код:
int[] arr = {8,1,0,9,4,3}; 
int isSorted = 0;
 
  for (int i = 0; (i < arr.length -1) && (isSorted>=0); i++){
    if (arr[i] <= arr[i + 1])){ 
           if (isSorted==0){
               isSorted=1;
           }
           if(isSorted==2){
              isSorted = -1;                     
           }        
    }
    else{
           if (isSorted==0){
               isSorted=2;
           }
           if(isSorted==1){
              isSorted = -1;                     
           }        
   }
   if (isSorted == 1) 
          System.out.println("Массив упорядочен по неубыванию");
    else if (isSorted == 2)
             System.out.println("Массив упорядочен по убыванию");
    else
              System.out.println("Массив не упорядочен");
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2017, 16:55   #8
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
нужно завести переменную и в цикле обращаться с ней.

например, примерно так:

Код:
int[] arr = {8,1,0,9,4,3}; 
int isSorted = 0;
 
  for (int i = 0; (i < arr.length -1) && (isSorted>=0); i++){
    if (arr[i] <= arr[i + 1])){ 
           if (isSorted==0){
               isSorted=1;
           }
           if(isSorted==2){
              isSorted = -1;                     
           }        
    }
    else{
           if (isSorted==0){
               isSorted=2;
           }
           if(isSorted==1){
              isSorted = -1;                     
           }        
   }
   if (isSorted == 1) 
          System.out.println("Массив упорядочен по неубыванию");
    else if (isSorted == 2)
             System.out.println("Массив упорядочен по убыванию");
    else
              System.out.println("Массив не упорядочен");
спасибо. не могли бы вы объяснить, что в данном коде значат 0,1,-1,2?
igra17 вне форума Ответить с цитированием
Старый 10.10.2017, 17:03   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

isSorted == 0 - значит, ещё в цикл по обработке не попали, состояние массива неизвестно, при первом сравнении запишем в переменную новое состояние, в зависимости от результатов первого сравнения.

isSorted == 1 - выполняется условие arr[i] <= arr[i + 1] => массив отсортирован по неубыванию

isSorted == 2 - выполняется условие else ( arr[i] > arr[i + 1] ) => массив отсортирован по убыванию.

isSorted == -1 - массив не отсортирован (и это же признак окончания цикла проверки, нет смысла перебирать оставшиеся элементы массива, если условие уже нарушено.

теперь стало немножко понятнее моя идея?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2017, 17:24   #10
igra17
Пользователь
 
Регистрация: 19.06.2017
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
isSorted == 0 - значит, ещё в цикл по обработке не попали, состояние массива неизвестно, при первом сравнении запишем в переменную новое состояние, в зависимости от результатов первого сравнения.

isSorted == 1 - выполняется условие arr[i] <= arr[i + 1] => массив отсортирован по неубыванию

isSorted == 2 - выполняется условие else ( arr[i] > arr[i + 1] ) => массив отсортирован по убыванию.

isSorted == -1 - массив не отсортирован (и это же признак окончания цикла проверки, нет смысла перебирать оставшиеся элементы массива, если условие уже нарушено.

теперь стало немножко понятнее моя идея?
да, большое спасибо!
igra17 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на упорядоченный и упорядоченный массив который взят из файла Sweex99 Помощь студентам 6 24.10.2016 18:18
Найти ошибку в коде (Для данной целочисленной матрицы размером n*m найти матрицу из 0 и 1...) код на C camel5 Помощь студентам 1 26.11.2013 06:11
Найти ошибку в коде,С++ ! Aaaaaa111 Помощь студентам 1 16.02.2012 11:10
Найдите,пжл, ошибку в коде Java lelicki_bolicki Помощь студентам 10 19.10.2011 19:00