将字符串插入已排序的数组中

时间:2015-01-21 01:11:49

标签: java arrays sorting

我在弄清楚如何让这个程序在Java中工作时遇到了一些问题。我应该有一个WordList类:

public class WordList{
    private int size; //number of words in array
    private String array1[]; //array of words
    private int capacity; // how big the array is supposed to be

我们应该有两个构造函数: 第一个:

public WordList(int capacity){
    this.array1 = new String[capacity]; //makes a new array of specified capacity
    this.capacity = capacity; //sets the capacity
    this.size = 0; //sets the size of array (i.e. # of words) to 0
}

第二个:

public WordList (String[] arrayOfWords){
    this.capacity = 2 * arrayOfWords.length; //makes the capacity of array twice the # of words in input array
    this.array1 = new String[capacity]; //makes a new array
    this.size = arrayOfWords.length; //sets the # of words in array
    for (int i = 0; i < arrayOfWords.length; i++){ //loops through array
        this.insert(arrayOfWords[i]); //inserts the words (sorted into our array)
}
}

最后是一个插入方法。我认为主要问题在这里。我不知道我的两个施工人员是否正确,但我确信110%有问题:

public void insert(String newword){


    for (int i = 0; i < size; i++){
        int l = newword.compareTo(array1[i]);
        if (l > 0)
            continue; // means that the word we're inserting is after
        if (l < 0){
            for (int j = size; j > i; j--){
                array1[j] = array1[j-1]; //shifts all array elements over by one - starting at end of array to avoid over writing anything
            }
            array1[i] = newword;//inserts the word
        }
        if (l == 0)
            return;//doesn't do anything if word is already in list
    }
    }

基本上它应该将提供的单词插入已经排序的单词数组中并保持列表排序。该程序刚崩溃。关于可能出错的任何想法?

2 个答案:

答案 0 :(得分:1)

在for循环中,尝试将j初始化为size-1而不是size。此外,请注意,如果您没有检查插入的容量,程序将运行,当插入完整阵列时,您将丢失最后一个元素。希望这会有所帮助。

答案 1 :(得分:0)

这是家庭作业吗?我认为是,所以我只是提出一些想法,而不是完整的答案。

  1. 由于数组已排序,您可以使用Arrays.binarySearch()查找insert()的位置

  2. 我知道你在构造函数中构建了一些额外的空间,但是如果你插入了足够的项目,你的数组就需要增长。插入需要比较大小和容量。

  3. 考虑一下你的所有事情是否正常转移&#34;码。记下纸上(或使用索引卡)一个示例初始数组,做一个gedanken插入,并一次循环你的代码更新数组。你可能有一个bug。只是说......: - )

  4. 您可以使用System.arraycopy()吗?如果是这样,请在插入或放大阵列时使用它。