我正在尝试构建一个程序,它接受一个整数数组作为参数并返回一个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";
}
}
答案 0 :(得分:9)
错误意味着没有为>
类型定义运算符String
,这是数组的元素类型。运算符<
和>
仅适用于int
或long
等基本类型,而不适用于对象。
在这里你需要使用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)
我认为你制造的东西比他们需要的更复杂。
答案 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");
}
}