如何在java中按字母顺序对字符串数组进行排序?

时间:2015-12-14 04:12:08

标签: java sorting nullpointerexception alphabetical

我是编程/编码的新手,现在已经在学校停留了几天。目标是采用一个充满单词的数组(每个位置是一个不同的单词)并按字母顺序排序。我已经尝试过对堆栈溢出进行一些研究,但是在我发现的一些例子之后我遇到了一些麻烦。这个类和驱动程序(如果你愿意,我会使用两部分设置)编译都很好,没有任何问题。当我尝试使用驱动程序中的alphaSort时会出现此问题。我收到下面标记的行的空指针异常。我过去在这些例外情况上遇到了一些麻烦,所以我确定这是一件我能忽视的小事。如上所述,我在java语法中还不够流畅,无法捕捉到这样的小错误。

我想我应该只包括整个方法,以防我的错误在开始时,在排序部分之前。到目前为止我(我在Stack溢出时发现了这个):

public void alphaSort()
{
    String alphaList[] = new String[wordList.size()];
    int count=0;
    //puts wordList into alphaList for easier sorting
    while(count<wordList.size()-1)
    {
        alphaList[count]=wordList.get(count);
        count++;
    }
    int shortestStringIndex;
    //sort begins here
    for(int j=0; j<alphaList.length -1; j++)
    {
        shortestStringIndex = j;
        for(int i=j+1; i<alphaList.length; i++)
        {
            if(alphaList[i].trim().compareTo(alphaList[shortestStringIndex].trim())<0) //null pointer exception points here
            {
                shortestStringIndex = i;
            }
        }
        if(shortestStringIndex !=j)
        {
            String temp = alphaList[j];
            alphaList[j] = alphaList[shortestStringIndex];
            alphaList[shortestStringIndex]=temp;
        }
    }
    //prints out results
    count=0;
    while(count<alphaList.length)
    {
        System.out.println(alphaList[count]);
        alphaOut.print(alphaList[count]);
        count++;
    }
}

非常感谢任何帮助。请尽可能详尽地给出答案(正如我所说,我是一个java新手)。谢谢:))

编辑:测试空值(我假设我的数组列表中的点是空白的)我做了以下方法:

    public void isNull()
{
    int count=0;
    while(count<wordList.size()-1)
    {
        if((wordList.get(count)).equals(""))
        {
            System.out.println("null");
            break;
        }
        else
        {
            System.out.println("nothing yet");
        }
        count++;
    }
}

while循环从未破坏过,我的方法已经完成了。

5 个答案:

答案 0 :(得分:3)

您需要更新第一个while循环以匹配:

while(count < wordList.size()) {
            alphaList[count] = wordList.get(count);
            count++;
        }

您不会将列表的每个索引复制到数组,这意味着当它检查最后一个索引时,它找不到值(NullPointerException)。

编辑:

这是我的完整测试课程:

import java.util.ArrayList;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    private ArrayList<String> wordList = new ArrayList<String>();

    public Test() {
        wordList.add("Test");
        wordList.add("Bee");
        wordList.add("Pig");
        wordList.add("Dog");
        alphaSort();
    }

    public void alphaSort() {
        String[] alphaList = new String[wordList.size()];
        int count = 0;
        while(count < wordList.size()) {
            alphaList[count] = wordList.get(count);
            count++;
        }
        int shortestStringIndex;
        for(int j = 0; j < alphaList.length - 1; j++) {
            shortestStringIndex = j;
            for(int i = j + 1; i < alphaList.length; i++) {
                if(alphaList[i].trim().compareTo(alphaList[shortestStringIndex].trim()) < 0) {
                    shortestStringIndex = i;
                }
            }
            if(shortestStringIndex != j) {
                String temp = alphaList[j];
                alphaList[j] = alphaList[shortestStringIndex];
                alphaList[shortestStringIndex]= temp;
            }
        }
        count = 0;
        while(count < alphaList.length) {
            System.out.println(alphaList[count++]);
        }
    }

}

输出:

Bee
Dog
Pig
Test

答案 1 :(得分:1)

试试这个......

dispatchKeyEvent

答案 2 :(得分:1)

将List复制到阵列时出错。它在列表的末尾插入一个null,导致你的NullPointerException。这是修订后的版本。我只是使用List上的标准java方法将List转换为数组,而不是循环遍历List并将每个项复制到数组(这是错误的)。

public static void alphaSort()
{
    String alphaList[] = wordList.toArray(new String[]{});
    int shortestStringIndex;
    //sort begins here
    for(int j=0; j<alphaList.length -1; j++)
    {
        shortestStringIndex = j;
        for(int i=j+1; i<alphaList.length; i++)
        {
            if(alphaList[i].trim().compareTo(alphaList[shortestStringIndex].trim())<0) //null pointer exception points here
            {
                shortestStringIndex = i;
            }
        }
        if(shortestStringIndex !=j)
        {
            String temp = alphaList[j];
            alphaList[j] = alphaList[shortestStringIndex];
            alphaList[shortestStringIndex]=temp;
        }
    }
    //prints out results
    int count=0;
    while(count<alphaList.length)
    {
        System.out.println(alphaList[count]);
        alphaOut.print(alphaList[count]);
        count++;
    }
}

答案 3 :(得分:0)

问题是您要将wordList.size()-1个项目添加到数组中,并且数组大小为wordList.size(),这意味着数组中的最后一个值为null < / p>

答案 4 :(得分:0)

对于这个while循环:

while (count<wordList.size()-1)
{
    alphaList[count]=wordList.get(count);
    count++;
}

您不需要循环到wordList.size()-1,因为您已经<而不是<=。您在第二个到最后一个索引处停止循环,因此不会将值分配给数组中的最后一个位置。而是while (count < wordList.size())while (count <= wordList.size()-1)