java - 阻止冒泡排序对列表中的空白项进行排序

标签 java arrays

我正在编写一个程序,它将获取一个磁盘文件,其中包含最大大小为 100 的字符串数组,并对它们执行一些操作。但是,由于我的冒泡排序方法搜索并尝试对 100 个(数组的长度)项目进行排序,而磁盘文件可能有(比如说)15 个项目,因此我收到控制台错误。冒泡排序方法返回控制台错误,因为它搜索剩余的 85 个项目并尝试对 85 个空白项目进行排序。我完全不知道如何解决这个问题。是否可以获取磁盘文件中的项目,将它们传递到另一个数组,然后对该数组进行冒泡排序,从而消除 85 个空白点?或者添加计数器是否可以解决我的问题?我对 Java 编码相当陌生,因此我们将不胜感激。

这是我收到的错误:

线程“main”中出现异常 java.lang.NullPointerException 在 java.lang.String.compareTo(来源未知) 在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;
      }

  }

最佳答案

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

更改此行:

return inputArr;

对此:

return Arrays.copyOf(inputArr, count);

关于java - 阻止冒泡排序对列表中的空白项进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40386235/

相关文章:

java - 获取 "XQueryException",意外的 token 语法错误

c++ - Visual C++ 数组大小崩溃

c - 如何反转数组的元素?

java - 一次交易中的两种方法

java - 用于 uml 设计的 IntelliJIdea 插件?

javascript - 获取 Javascript 嵌套数组对象值

Java Applet - ArrayIndexOutOfBoundsException

javascript - 使用切片的数组复制不起作用

java - 使用 Virtual Box 在 Ubuntu 中运行 Java 类

java - AppEngine 实体的审核字段