将字符串排序为在Java中插入到数组中

时间:2015-04-12 22:12:35

标签: java arrays string compareto

我正在尝试创建一个程序,该程序接受用户输入并按字母顺序对其进行排序,因为它使用compareTo String操作(而非array.sort)并打印最终排序的数组结束。我已经解决了这个问题的大部分问题但是一旦我进入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;

        }


}

3 个答案:

答案 0 :(得分:1)

此代码存在许多问题。首先,我会回答你的问题,然后列举其他一些问题。

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
}

现在针对其他问题。

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

答案 1 :(得分:0)

如果您要按照自己的方式进行排序,那么您应该使用TreeMap数据结构,而不是数组。但是,如果要对数组进行排序,则需要在SortInsert中的else if子句中添加一些行(应该是sortInsert,BTW)。 (另一个问题:为什么不是其他而不是其他?)

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

答案 2 :(得分:0)

找到要插入的位置后,必须将所有以下元素向下移动一个。如下所示:

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;