检查一个数组是否排序
我想构建一个接受一个整数数组作为参数并返回一个字符串的程序。如果数组从最小值到最大值进行排序,字符串将是“升序”,如果数组从最大值到最小值排序,则“降序”,“未排序”是阵列根本不排序,“所有相同“如果数组的所有元素都相等。检查一个数组是否排序
到目前为止我的代码如下。我在正确的轨道上吗?我在下面指出的“The operator>未定义参数类型”一行中出现错误。任何想法可能会导致它?
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";
}
}
错误意味着操作>
为String
类型,这是您的阵列的元件类型没有定义。操作符<
和>
仅适用于基本类型,如int
或long
,而不是对象。
在这里,你需要使用String.compareTo
代替,就像这样:
if (arrayS[i].compareTo(arrayS[i+1]) > 0)
我不知道!但我现在明白了。感谢信息丰富的答案彼得。非常感激! – choloboy 2012-03-24 16:51:53
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
用户输入一个整数数组,所以数组类型应保持INT [ ]。例如:
public static int[] arrayInput() {
// ...
return array;
}
public static String isSorted(int[] arrayS) {
// ...
}
因此,第二种方法是我应该将int数组转换为字符串数组? – choloboy 2012-03-24 17:06:57
@theolc,不,输入是作为文本到达的,如果你想把它存储在一个'int []'数组中,你需要首先将每个'String'转换为'int'。 ['Integer.parseInt'](http://docs.oracle.com/javase/6/docs/api/java/lang/Integer.html#parseInt%28java.lang.String%29)。然后你可以处理'int []'而不是'String []',并且实际上将数组中的'int'与'>'进行比较。 – 2012-03-24 17:17:06
再次感谢您的帮助Peter – choloboy 2012-03-24 21:04:02
我认为你正在做的事情比他们需要更复杂。
- 在arrayInput中创建一个int [],然后将其转换为String。为什么?
- 在isSorted中,您接受一个String []并检查它是否已排序。
- 如果你坚持#1应该产生一个字符串,为什么#2接受一个String []作为输入。
- 我觉得你isSorted代码将工作得很好由于是,如果输入的是一个int []
- 没有什么用isSorted连接arrayInput。
另一种策略。计算数组的升序和降序,然后查看它是否匹配。这可能效率较低,但它非常简单,易于实现/调试。我只需要装箱原始数组以进行反向排序。
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");
}
}
“我仍然是Java的新手,所以我裸露!” - 我不会与任何人见面,不管他们是否了解Java。不过,我可能愿意承担你的问题。 – duffymo 2012-03-24 16:17:46
哈哈我的坏与错字队友! – choloboy 2012-03-24 16:49:39