在 Java 中对插入数组的字符串进行排序

Sorting Strings as inserted into array in Java

我正在尝试创建一个程序,该程序接受用户输入并在使用 compareTo String 操作(不是 array.sort)时按字母顺序对其进行排序并打印最终排序数组在最后。我已经了解了这个问题的大部分内容,但是一旦我进入排序功能,我就迷路了。有人对我如何完成 SortInsert 方法有任何想法吗?

import java.util.*;
public class SortAsInserted {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int array_size = GetArraySize();
        String[] myArray = new String[array_size];
        for (int i = 0; i < array_size; i++){
            String nextString = GetNextString();
            String[] sortedArray = SortInsert(nextString, myArray);
        }
        PrintArray(sortedArray);
    }



        input.close();
        }

    }




    public static String[] SortInsert(String nextString, String[] myArray){
        for(int i = 0; i < myArray.length;)
            if (nextString.compareToIgnoreCase(myArray[i]) > 0) {
                i++;
                //if current text is less(alphabetically) than position in Array
            }else if (nextString.compareToIgnoreCase(myArray[i]) < 0){

            }

        }

    public static int GetArraySize(){
        Scanner input = new Scanner(System.in);
        System.out.print("How many items are you entering?: ");
        int items_in_array = input.nextInt();
        return items_in_array;


    }

    public static void PrintArray(String[] x) {
        for (int i = 0; i < x.length; i++){
            System.out.print(x[i]);
        }

    }

    public static String GetNextString(){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the next string: ");
        String next_string = input.nextLine();
        return next_string;

        }


}

如果您要随时排序,您应该使用 TreeMap 数据结构,而不是数组。但是,如果您想在使用数组时进行排序,则需要在 SortInsert 的 else if 子句中添加一些行(顺便说一句,应该是 sortInsert)。 (另一个问题:为什么是 else if 而不是 else?)

这些行应该创建一个比现有数组大一号的新数组,将旧数组的前 i-1 个元素复制到新数组,将新元素放在位置 i,然后复制剩余的元素旧数组的位置在新数组中大一。

找到要插入的位置后,必须将以下所有元素向下移动一位。类似于以下内容:

String temp = array[position];
for (int j = position+1; j < array_size-1; j++) {
    String temp2 = array[j];
    array[j] = temp;
    temp = temp2;
}
array[array_size-1] = temp;

这段代码有很多问题。首先我会回答你的直接问题,然后列举一些其他问题。

SortInsert 方法接受一个 String[],它已经用 null 值初始化,所以你需要考虑到这一点。 for 循环看起来像这样。 (我使用注释而不是编写实际代码,因为我不做项目)

for (int i=0; i<myArray.length; ++i) {
    if (myArray[i] == null) { 
        // we found a blank spot.  use it to hold nextString.
        break;
    } else if (nexString.compareToIgnoreCase(myArray[i]) < 0) { 
        // nextString should be in spot i, so make room for it
        // by shuffling along whatever is in the array at "i" and later
        // by one place, then put nextString into position "i"
        break;
    }
    // otherwise we'll just move to the next position to check
}

现在讨论其他问题。

  • 您在 main 中有一个从未使用过的 Scanner 对象。如果您的其他方法是自己制作的,那么拥有它并在最后关闭它是没有意义的。
  • myArray 将始终是排序后的数组,因此没有必要从 SortInsert 中创建一个名为 sortedArray 和 return 的局部变量。请注意,您尝试打印 sortedArray 无论如何都会失败,因为该局部变量仅在 for 循环的范围内。
  • 打印时应该 myArray 传递给 PrintArray