Массив отсортирован или нет? Java базового уровня

#java

#java

Вопрос:

Я пытаюсь создать программу, которая сообщает мне, отсортирован ли мой массив (по возрастанию и убыванию).

Я создал функцию, и если возвращает true, массив уже отсортирован, а если возвращает false, массив не отсортирован.

На самом деле, всегда получается «Не отсортировано». Я не знаю, правильна ли логика, но я думаю, что да, я не знаю.

Вы можете мне помочь, ребята?

 package exercici11;

import java.util.Scanner;

public class SortedOrNot {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int[] myArray = new int[10];
        int prev1 = 0;
        int prev2 = 0;
        int cont1 = 0;
        int cont2 = 0;

        System.out.print("Enter 10 numbers: ");

        for (int i = 0; i < myArray.length; i  ) {
            myArray[i] = sc.nextInt();
        }

        String result = isSorted(myArray, prev1, prev2, cont1, cont2) ? result = "Is sorted." : "Is not sorted.";
        System.out.println(result);

        sc.close();

    }

    private static boolean isSorted(int[] myArray, int prev1, int prev2, int cont1, int cont2) {
        for (int i = 0; i < myArray.length; i  ) {
            for (int j = 0; j < myArray.length; j  ) {
                prev1 = myArray[i];
                if (prev1 < myArray[i]) {
                    // Ascending sort
                    cont1  ;
                    if (cont1 == 10) {
                        return true;
                    }
                } else if (prev2 > myArray[i]) {
                    // Descending sort
                    cont2  ;
                    if (cont2 == 10) {
                        // Ascending sort
                        return true;
                    }
                }
            }
        }
        return false;
    }

}

  

Спасибо!

С уважением, Алекс.

Комментарии:

1. prev1 < myArray[i] не может быть истинным сразу после назначения myArray[i] prev1 . Рассмотрим <= ?

2. Я не понимаю ни отрицательного, ни близкого голосования. Я считаю вопрос совершенно ясным. Пример кода может быть не совсем минимальным, но ошибка очевидна: всегда получается «Не отсортировано» . Итак, давайте не будем требовать невозможного от программистов базового уровня.

3. Алекс, ты делаешь это более сложным, чем нужно. По крайней мере, мне немного сложно следовать логике, которую вы имели в виду. См., Например, Проверку того, отсортирован ли массив в Java .

Ответ №1:

Я изменил isSorted() метод и добавил несколько комментариев.

 import java.util.Scanner;

public class SortedOrNot {

public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);
    int[] myArray = new int[10];

    System.out.print("Enter 10 numbers: ");

    for (int i = 0; i < myArray.length; i  ) {
        myArray[i] = sc.nextInt();
    }

    String result = isSorted(myArray) ? result = "Is sorted." : "Is not sorted.";
    System.out.println(result);

    sc.close();

}

private static boolean isSorted(int[] myArray) {
    int count = 0;
    int firstElement = myArray[0];
    int lastElement = myArray[myArray.length - 1];
    if(lastElement - firstElement >= 0){ 
    // Let's say myArray is sorted and if (lastElement - firstElement) >= 0
    // then I check if the elements from array are in ascending order
    // OR are all the same
        for(int i = 0; i < myArray.length - 1; i  ){
            if(myArray[i] <= myArray[i   1]) {
                count  ;
            }
        }
    }
    else {
    // else I check if the elements from array are in descending order
        for(int i = 0; i < myArray.length - 1; i  ){
            if(myArray[i] >= myArray[i   1]){
                count  ;
            }
        }
    }

    // for n numbers there will be n - 1 comparisons
    return count == myArray.length - 1;
}

}
  

Ответ №2:

Для этого вы можете использовать метод Arrays.sort():

 import java.util.Arrays;
import java.util.Collections;

public class CheckSortedArray {
    public static void main(String[] args) {
        Integer[] arr = { 1, 2, 3, 6, 9, 100 };
        Integer[] arr2 = { 1, -2, 3, 6, 9, 100 };
        Integer[] arr3 = { 9, 7, 0, -1, -100 };

        System.out.println(isArraySorted(arr, true));   // Prints true as array is sorted in ascending order
        System.out.println(isArraySorted(arr2, true));  // Prints false as array is unsorted
        System.out.println(isArraySorted(arr3, false)); // Prints true as array is sorted in descending order
    }

    /**
     * Checks if given array is sorted or not in given order
     *
     * @param arr              Input array to check its order
     * @param isAscendingOrder true for ascending order, false for descending
     * @return Array is sorted or not
     */
    public static boolean isArraySorted(Integer[] arr, boolean isAscendingOrder) {
        Integer[] arrCopy = Arrays.copyOf(arr, arr.length);
        if (isAscendingOrder) {
            // Sorts the array in ascending order
            Arrays.sort(arr);
        } else {
            // Sorts the array in descending order
            Arrays.sort(arr, Collections.reverseOrder());
        }
        // Checks if the original array is equal to sorted array or not
        return Arrays.equals(arr, arrCopy);
    }
}
  

Ответ №3:

Второе значение for должно начинаться с i 1, и вы должны сравнить count1 и count2 с 45.