检查数组是否已排序
我正在尝试构建一个程序,它接受一个整数数组作为参数并返回一个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
类型是数组的元素类型。 运算符<
和>
仅可用于原始类型(如int
或long
,而不能用于对象。
在这里你需要使用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) { // ... }
我认为你制造的东西比他们需要的更复杂。
- 在arrayInput中,您创建一个int [],然后将其转换为String。 为什么?
- 在isSorted中,您获取String []并检查它是否已排序。
- 如果你坚持#1应该产生一个字符串,为什么#2将String []作为输入。
- 我认为你的isSorted代码可以很好地工作,如果输入是一个int []
- 没有任何东西将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"); } }