检查数组是否已排序

时间:2012-03-24 16:14:12

标签: java arrays sorting

我正在尝试构建一个程序,它接受一个整数数组作为参数并返回一个String。如果数组从最小到最大排序,字符串将是“升序”,如果数组从最大到最小排序,则“降序”,“未排序”是数组根本没有排序和“全部相同的“如果数组的所有元素都相等。

到目前为止,我在下面有以下代码。我是在正确的轨道上吗?我一直在下面指出的行上出现错误,说“运算符>未定义参数类型”。知道是什么原因引起的吗?

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 个答案:

答案 0 :(得分:9)

错误意味着没有为>类型定义运算符String,这是数组的元素类型。运算符<>仅适用于intlong等基本类型,而不适用于对象。

在这里你需要使用String.compareTo,如下所示:

    if (arrayS[i].compareTo(arrayS[i+1]) > 0)

答案 1 :(得分:2)

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

答案 2 :(得分:2)

用户输入一个整数数组,因此数组的类型应保存为int []。例如:

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

public static String isSorted(int[] arrayS) {
    // ...
}

答案 3 :(得分:0)

我认为你制造的东西比他们需要的更复杂。

  1. 在arrayInput中创建一个int [],然后将其转换为String。为什么?
  2. 在isSorted中,您获取String []并检查它是否已排序。
    1. 如果你坚持#1应该产生一个字符串,为什么#2将String []作为输入。
    2. 如果输入是int []
    3. ,我认为你的isSorted代码可以正常工作
  3. 没有任何东西将arrayInput与isSorted连接。

答案 4 :(得分:0)

另一种策略。计算升序和降序数组的含义,然后查看它是否匹配。这可能效率较低,但它非常简单,易于实现/调试。我只需要对原始数组进行封装以进行反向排序。

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");
    }
}