方法无法访问已排序的数组

时间:2015-10-03 14:01:05

标签: java arrays sorting

以下代码按字典顺序对单词词典进行排序。问题是我无法访问for循环之外的排序数组。嗯,我认为这是问题所在。我已经在另一个方法中声明了数组字,并将其返回到同一个类中的私有变量。但是在我对数组进行排序并尝试将其打印出来之后,它只打印出原始数组。我还想提一下,这个排序方法确实有效,因为我在另一个类中测试了它,其中所有内容都在main方法中。所以我再次相信我的问题与返回新的排序数组有关。在排序数组之后,当我尝试返回数组时,我还需要在方法中编写几行代码,使用"返回单词;"我无法编写此代码。

public void insertionSort() {
int in, out;

for (out=1; out<nElems; out++){
    String temp = words[out];                               // remove marked item
    in = out;                                               // start shifting at out                

    while (in>0 && words[in-1].compareTo(temp)>0){          // until temp is lexicographically after after the word it is being compared to
        words[in] = words[in-1];                            // shifts word to next position in lexicographical order
        --in;                                                   
    }
    words[in] = temp;
}
for(int i=0; i <words.length; i++)
    System.out.println(words[i]);

2 个答案:

答案 0 :(得分:0)

  

我已用另一种方法声明了数组字

听起来你已经声明了两个数组:一个在另一个方法中,一个完全独立的数组正在被排序。确保两个方法都使用相同的数组。

如果您希望它们都使用在类级别声明的数组,请不要在另一个方法中声明单独的数组。例如,如果您在另一种方法中有String[] words = new String[10];,请将其更改为words = new String[10];。如果你真的需要nElems变量(即,如果sort方法不能简单地使用words.length),请确保该变量也没有被重新声明并且被设置为正确的值。

或者,如果它接受任何要作为参数排序的数组,那么排序方法将更有用,而不是依赖于将数据排序到特定数组中:

public static void insertionSort(String[] words, int nElems) {
    /* ... rest of method as before ... */
}

我也使用了static方法,因为它不再依赖于任何实例字段。

答案 1 :(得分:0)

好吧,正如我理解你所说的那样,你在类级别使用私有变量,该变量从方法中接收单词[]数组项......在这种情况下:

  1. 确保类级别的私有变量是名为words的数组。
  2. 使私有变量(现在命名的单词)与从其他方法接收的单词数组相同。
  3. 因为您正在调用insertedSort()中的单词,您需要访问私有变量值,您无法从其他方法获取单词[]数组值,因为该数组是该方法的本地数组,因此您必须返回它是某个数组varibale(你必须命名的私有变量)的值,所以它是你必须访问的那个变量。