我正在编写一个程序,它将获取一个磁盘文件,其中包含一个最大大小为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;
}
}
答案 0 :(得分:1)
字符串数组的某些元素未初始化。只有您从输入文件中读取的值被赋值,其余值为null。一个简单的解决方法是返回从具有指定值的开头部分创建的新数组。
更改此行:
return inputArr;
对此:
return Arrays.copyOf(inputArr, count);