检查数组是否已排序

我正在尝试构建一个程序,它接受一个整数数组作为参数并返回一个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  arrayS[i + 1]) //ERROR ON THIS LINE return "not ascending"; return "ascending"; } } 

该错误意味着没有为String类型定义operator >String类型是数组的元素类型。 运算符<>仅可用于原始类型(如intlong ,而不能用于对象。

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

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

String实现Comparator ,它允许您比较两个对象的值(接口的forms实际上是Comparator ,因此您使用的是Comparator )。

所以,而不是:

 for (int i=0;iarrayS[i+1]) { // Stuff 

……你应该使用:

 for (int i=0;i 0) { // Stuff 

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

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

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

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

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

 private static void isSorted(int[] array) { List boxed = new ArrayList(); for (int i : array) { boxed.add(i); } List ascending = new ArrayList(boxed); Collections.sort(ascending); List descending = new ArrayList(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"); } }