Проверка, отсортирован ли массив - PullRequest
1 голос
/ 24 марта 2012

Я пытаюсь создать программу, которая принимает массив целых чисел в качестве параметра и возвращает строку. Строка будет «восходящей», если массив отсортирован от наименьшего к наибольшему, «нисходящей», если массив отсортирован от наибольшего к наименьшему, «не отсортировано», если массив вообще не отсортирован и то же самое ", если все элементы массива равны.

Пока у меня есть следующий код ниже. Я на правильном пути? Я продолжаю получать сообщение об ошибке в строке, указанной ниже: «Оператор> не определен для типа аргумента». Есть идеи, что может вызвать это?

import java.util.*;
import java.io.*;
import java.util.Scanner;

public class arrayCheck {
    public static void main(String[] args) throws IOException {
        arrayInput();
        isSorted(null);
    }

    public static String arrayInput() {
        int size = 0;
        Scanner in = new Scanner(System.in);
        System.out.println("Enter the size of the array: ");
        size = in.nextInt();
        System.out.println("The size you enetered is " + size);
        int[] array = new int[size];
        System.out.println("Enter the array: ");
        int j = 0;
        while (j < size) {
            System.out.print("Enter int"+ (j + 1) + ": ");
            array[j] = in.nextInt();
            ++j;
        }
        in.close();
        String arrayS = Arrays.toString(array);
        return arrayS;
    }

    public static String isSorted(String[] arrayS) {
        int n = arrayS.length;
        for (int i = 0; i < n - 1; ++i)
            if (arrayS[i] > arrayS[i + 1])   //ERROR ON THIS LINE
                return "not ascending";
        return "ascending";
    }
}

Ответы [ 5 ]

9 голосов
/ 24 марта 2012

Ошибка означает, что оператор > не определен для типа String, который является типом элемента ваших массивов. Операторы < и > могут использоваться только для примитивных типов, таких как int или long, но не для объектов.

Здесь вам нужно использовать String.compareTo вместо этого, например:

    if (arrayS[i].compareTo(arrayS[i+1]) > 0)
2 голосов
/ 24 марта 2012

Пользователь вводит массив целых чисел, поэтому тип массива должен быть сохранен как int [].Например:

public static int[] arrayInput() {
    // ...
    return array;
}

public static String isSorted(int[] arrayS) {
    // ...
}
2 голосов
/ 24 марта 2012

String реализует Comparator, что позволяет сравнивать значения двух объектов (форма для интерфейса на самом деле Comparator<E>, поэтому вы используете Comparator<String>).

Итак, вместо:

for (int i=0;i<n-1;++i) {
    if (arrayS[i]>arrayS[i+1]) {
        // Stuff

... вы должны использовать:

for (int i=0;i<n-1;++i) {
    if (arrayS[i].compareTo(arrayS[i+1]) > 0) {
        // Stuff
0 голосов
/ 24 марта 2012

Альтернативная стратегия.Вычислите, какими будут восходящие и нисходящие массивы, а затем просто посмотрите, совпадают ли они.Это может быть менее эффективно, но довольно надежно и легко реализовать / отладить.Мне нужно было только упаковать массив примитивов, чтобы выполнить обратную сортировку.

private static void isSorted(int[] array) {
    List<Integer> boxed = new ArrayList<Integer>();
    for (int i : array) {
        boxed.add(i);
    }
    List<Integer> ascending = new ArrayList<Integer>(boxed);
    Collections.sort(ascending);

    List<Integer> descending = new ArrayList<Integer>(ascending);
    Collections.reverse(descending);

    if (boxed.equals(ascending)) {
        System.out.println("Ascending");
    } else if (boxed.equals(descending)) {
        System.out.println("Descending");
    } else {
        System.out.println("Unsorted");
    }
}
0 голосов
/ 24 марта 2012

Я думаю, вы делаете вещи более сложными, чем они должны быть.

  1. В arrayInput вы создаете int [] и затем конвертируете его в String. Почему?
  2. В isSorted вы берете строку [] и проверяете, отсортирована ли она.
    1. Если вы настаиваете, что # 1 должен генерировать String, почему # 2 принимает String [] в качестве входных данных.
    2. Я думаю, что ваш isSorted код будет работать хорошо, как есть, если бы входные данные были int []
  3. Нет ничего, связывающего массив ввода с isSorted.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...