保持Bubblesort不对列表中的空白项进行排序

时间:2016-11-02 17:33:28

标签: java arrays

我正在编写一个程序,它将获取一个磁盘文件,其中包含一个最大大小为100的字符串数组,并为它们做一些事情。但是,我得到一个控制台错误,因为我的bubblesort方法搜索并尝试排序100(数组的长度)项目,而磁盘文件可能有15个项目。 bubblesort方法返回一个控制台错误,因为它搜索剩余的85个项目并尝试排序85个空白项目。我完全迷失了如何解决这个问题。是否有可能获取磁盘文件中的项目,将它们传递到另一个阵列然后冒泡到那个,以便消除85个空白点?或者是添加一个可以解决我的问题的计数器?我是java编码的新手,所以任何帮助都会非常感激。

这是我得到的错误:

线程中的异常" main"显示java.lang.NullPointerException at java.lang.String.compareTo(Unknown Source)     在Assignment7.bubbleSort(Assignment7.java:52)     在Assignment7.main(Assignment7.java:12)

这是我的代码:

 import java.io.*;
 import java.util.*;

public class Code3 {

public static void main(String[] args) throws IOException {


    String[] list2, targets, list1;
    list1 = getInput("C:\\Users\\Steave\\Desktop\\file14.txt");
    list2 = bubbleSort(list1);                                            
    targets = getInput("C:\\Users\\Steave\\Desktop\\upload6.txt");

    double seqAvg = seqSearch(list1, targets);
    double binAvg = binSearch(list2, targets);
    System.out.println("Average number of searches for the seqeuntial search is " + seqAvg);
    System.out.println("Average number of searches for the binary search is " + binAvg);

}//end of main method

public static String[] getInput(String filename) throws IOException {
    String[] inputArr = new String[100];

    Scanner in = new Scanner(new File(filename));
    int count = 0;
    while(in.hasNext()) {  
        if (count < 100){
            inputArr[count++] = in.next();
        } else {
            break;
        }

        }       
    in.close();
    return inputArr;

}// end getInput method



 //This method will sort the array and pass it onto a list.
public static String[]bubbleSort(String[] inputArr) {

    String[] Array2 = inputArr.clone();

    for (int i = 0; i<Array2.length; i++)
    {
      for (int j = 0; j<Array2.length-1; j++)
      {
          if (Array2[j].compareTo(Array2[j+1]) > 0)         //CONSOLE ERROR HERE
          {
            String temp = Array2[j];
            Array2[j] = Array2[j+1];
            Array2[j+1] = temp;
          }
       }
    } 

    return Array2;

}// End of sort method.

//This method will do a sequential search on the list1
public static double seqSearch(String[] list1, String[] targets){
      {
          for (int j = 0; j < list1.length; j++)
          {
              for(String str:targets){
              if(list1[j].equalsIgnoreCase(str)){
                  return j;
              }
          }
             {
                return j;
             }
         }
         return -1;
       }

}//end of sequentialSearch method


    //This method will do a binary search on the list   
  public static int binSearch(String[] list1, String[] targets) {
       int lo = 0;
        int hi = list1.length - 1;
        int mid = -1;

        while( lo <= hi ) {
          mid = (lo+hi)/2;

          for(String str:targets){
          if(list1[mid].equalsIgnoreCase(str)){
              return mid;
          }

          hi = mid-1;


          } for(String str:targets){
          if(list1[mid].equalsIgnoreCase(str)){
              return mid;
          }
      }

            lo = mid+1;
           {
            return mid;
          }
        }
        return mid;
      }

  }

1 个答案:

答案 0 :(得分:1)

字符串数组的某些元素未初始化。只有您从输入文件中读取的值被赋值,其余值为null。一个简单的解决方法是返回从具有指定值的开头部分创建的新数组。

更改此行:

return inputArr;

对此:

return Arrays.copyOf(inputArr, count);