冒泡排序作业出错

Posted

技术标签:

【中文标题】冒泡排序作业出错【英文标题】:Error with bubble sort homework 【发布时间】:2016-10-13 06:52:23 【问题描述】:

基本上,我有作业要求我获取一个字符串数组和一个字符串搜索词,并返回搜索词在数组中的位置(如果未找到,则返回 -1)并获取一个字符串数组和冒泡把它分类。我收到了一个似乎只是冒泡排序的错误,我不知道为什么。

我得到的错误信息是:

Exception in thread "main" java.lang.NullPointerException
at java.lang.String$CaseInsensitiveComparator.compare(String.java:1193)
at java.lang.String$CaseInsensitiveComparator.compare(String.java:1186)
at java.lang.String.compareToIgnoreCase(String.java:1239)
at mmtextreader.MMTextReader.bubbleSort(MMTextReader.java:100)
at mmtextreader.MMTextReader.main(MMTextReader.java:47)

代码:

public class TextReader 

    /**
     * @param args the command line arguments
     * @throws java.io.FileNotFoundException
     */
    public static void main(String[] args) throws FileNotFoundException 
        // TODO code application logic here

        String[] Array;

        Array = wordPut("beowulf.txt");

        Scanner reader = new Scanner(System.in);

        System.out.println("Input word: ");

        String term = reader.next();

        int position = pFind(Array, term);

        if(position == -1) 
            System.out.println("no word found");
         else 
            System.out.println(term + " is found at " + (position+1));
        

        bubbleSort(Array);
    

    public static String[] wordPut(String s) throws FileNotFoundException 
        String[] Array = new String[50000];

        Scanner reader = new Scanner(new BufferedReader(new FileReader(s))).useDelimiter("[^\\pAlpha']+");

        int wordcount = 0;
        while (reader.hasNext()) 
            Array[wordcount] = reader.next();
            wordcount++;
        
        for (int i = 0; i < Array.length; i++) 
            if (Array[i] != null) 
                System.out.println(Array[i]);
            
        

        return Array;
    

    public static String[] bubbleSort(String[] a) 
        int lElement = a.length - 1;
        boolean t = true;
        for (int i = 0; i <= a.length - 1; i++) 

            boolean swap = false;

            for (int j = 0; j < lElement; j++) 
                if (a[j].compareTo(a[j + 1]) > 0) 
                    String store = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = store;
                    swap = true;
                
            
            lElement--;
            if (swap == false) 
                break;
            
        
        for(int n = 0; n < a.length; n++) 
            System.out.println(a[n]);
        
        return a;
    

    public static int pFind(String[] a, String trm) 
        int pos = -1;
        for (int i = 0; i < a.length; i++) 
            if (a[i].compareToIgnoreCase(trm) == 0) 
                pos = i;
                break;
            
        
        return pos;
    


【问题讨论】:

您要解决的问题是什么?错误是什么? 永远记住错误信息是解决编程问题的关键。 请根据以下标准重写您的问题:***.com/help/mcve 您需要告诉我们您遇到的错误是什么。数组是否未正确排序?程序崩溃了吗?您收到错误消息吗?如果您向我们提供这些信息,我们会更容易为您提供帮助。 【参考方案1】:

好的!我检查了您的代码,您唯一的问题是您将数组初始化为 5000 的大小,这是 wordPut() 方法中的问题

  String[] Array = new String[50000];

我在我的电脑上试过你的代码,工作正常,冒泡排序也很顺利,除了声明数组,试着找出数组的大小然后声明!

【讨论】:

这是作业,他不是要算法,而是为什么他的算法不行。你仍然可以编辑并解释他的错误是什么。 @Asoub 更好吗? :D 是的,太好了!所以基本上他没有在他的数组中设置所有的 50000 值,所以它们是 null 并且是 NPE ?

以上是关于冒泡排序作业出错的主要内容,如果未能解决你的问题,请参考以下文章

C#基础第三天-作业-集合-冒泡排序-模拟名片

C#基础第三天-作业答案-集合-冒泡排序-模拟名片

0913作业(冒泡排序二分查找法模拟摇乐游戏)

-课后作业)

文件排序及二分查找法与冒泡排序法

冒泡排序这 2 个小技巧,你了解吗?