未为参数类型java.lang.String,java.lang.String定义operator>

时间:2019-03-26 05:16:45

标签: java arrays sorting

在第40行: if(stringArray [j]> stringArray [j + 1])

对于参数类型java.lang.String,java.lang.String,未定义运算符>。为什么?以及我该如何解决?

    public static void main(String[] args)
    {
        System.out.println("Welcome! How many strings would you like to sort?");
        Scanner input = new Scanner(System.in);
        int stringSize = input.nextInt();
        String [] array = new String[stringSize];           //creating array of the inputed size

        for (int i = 0; i < stringSize; i++)                //loop for iterating array
        {
            System.out.print("Please enter string " + (i+1) + ": ");
            String stringInput = input.next();      //entering strings
            array[i] = stringInput;                         //assigning to corresponding locations
        }

        int arrayLength = array.length;
        sortLength(array, arrayLength);
        System.out.print("Your sorted array is: ");
        for (int i = 0; i < arrayLength; i++) 
            System.out.println(array[i] + ", "); 

        input.close();
        System.out.print("Goodbye!");
    }

    public static void sortLength(String [] stringArray, int length) //sorting from shortest to longest using bubblesort method
    {
        length = stringArray.length;
        for(int i = 0; i < length - 1; i++)             //i represents # of items sorted
        {
            for(int j = 0; j < i; j++)
            {
                String temp = stringArray[i];
                if(stringArray[j] > stringArray[j+1])   //comparing and swapping the array elements
                {
                    temp = stringArray[j];
                    stringArray[j] = stringArray[j+1];
                    stringArray[j+1] = temp;
                }   
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您不需要将数组的length作为参数传递,您实际上应该调用String.length()来获取(并比较){{ 1}}。另外,不要仅将相邻元素与Stringj(使用j+1)进行比较。喜欢,

i

答案 1 :(得分:0)

  

对于参数类型java.lang.String,java.lang.String,未定义运算符>。

正确

  

为什么?

因为关系运算符>>=<<=仅为基本类型定义。 String不是原始类型。这是引用类型。

(除了:==!=运算符是为引用类型定义的,但您不应将它们用于比较String的值。为此,请使用String::equals。请参见How do I compare strings in Java?

  

该如何解决?

这取决于您要执行的操作:

  • 如果您要按词法比较两个String值,请使用String::compareTojavadoc
  • 如果您要按词法比较两个String值而忽略大小写区别,请使用String::compareToIgnoreCasejavadoc)。
  • 如果尝试按长度排序String对象,则需要通过比较String::lengthjavadoc)返回的值来实现。 (当您有两个长度相同但不相等的字符串时,您可能希望/需要使用String::compareTo作为平局决胜手。请仔细阅读练习的要求。)