[英]How to rewrite my two methods so I do not get a NullPointerException?
因此,我的任务是为数组编写两个简单的方法:第一个方法,将数组的大小加倍; 第二种方法,找到数组中第一个重复字符串的索引。 主要方法是我的教授写的,不得更改。 我的问题是我在运行我的代码时继续收到 NullPointerException。 我相信它与 Arrays.sort() 或我老师在 main 中的代码有关,但我被指示:只使用数组(没有其他数据结构),使用 Arrays.sort() 来查找欺骗的索引,以及不要修改程序中的任何其他内容......有什么办法可以按照这些说明重写我的方法吗?
完整代码:
import java.io.*;
import java.util.*;
public class Practice
{
static final int CAPACITY = 10;
static final int NOT_FOUND = -1;
public static void main (String[] args) throws Exception
{
if (args.length < 1 )
{
System.out.println("\nusage: C:\\> java Practice <words filename>\n\n"); // i.e. C:\> java Lab2 10Kints.txt 172822words.txt
System.exit(0);
}
String[] wordList = new String[CAPACITY];
int wordCount = 0;
BufferedReader wordFile = new BufferedReader( new FileReader(args[0]) );
while ( wordFile.ready() ) // i.e. while there is another line (word) in the file
{ if ( wordCount == wordList.length )
wordList = upSizeArr( wordList );
wordList[wordCount++] = wordFile.readLine();
} //END WHILE wordFile
wordFile.close();
System.out.format( "%s loaded into word array. size=%d, count=%d\n",args[0],wordList.length,wordCount );
int dupeIndex = indexOfFirstDupe( wordList, wordCount );
if ( dupeIndex == NOT_FOUND )
System.out.format("No duplicate values found in wordList\n");
else
System.out.format("First duplicate value in wordList found at index %d\n",dupeIndex);
} // END OF MAIN
// TWO METHODS
static String[] upSizeArr( String[] fullArr )
{
int size = fullArr.length; //find the length of the arrays
String[] newSizeArr = new String[(2 * size)]; // creates new array, doubled in size
for (int a = 0; a < size; a++) {
newSizeArr[a] = fullArr[a];
}
return newSizeArr;
}
static int indexOfFirstDupe( String[] arr, int count )
{
Arrays.sort(arr);
int size = arr.length;
int index = NOT_FOUND;
for (int x = 0; x < size; x++) {
for (int y = x + 1; y < size; y++) {
if (arr[x].equals(arr[y])) {
index = x;
break;
}
}
}
return index;
}
} // END OF PROGRAM
NullPointerException 的位置:
编辑:这个问题解决了库代码中的 NPE,而不是我自己的代码。
根据堆栈跟踪的图像,NPE 发生在Arrays.sort()
。 虽然没有记录(我可以看到),但我相信如果数组包含null
,则此方法会抛出 NPE 。 它还能做什么? null
在自然顺序中不能有自然位置,因此包含null
的数组不能用Arrays.sort(Object[])
排序。
怎么修? 我看不出对数组进行排序的意义,因此您可以将其省略。 排序意味着第一个重复项的返回索引不是原始数组的有效索引(从排序之前)。 但是,如果您的教授坚持,您可以通过适当使用重载的Arrays.sort(Object[] a, int fromIndex, int toIndex)
来修复Arrays.sort(Object[] a, int fromIndex, int toIndex)
这样您只需对字符串所在的数组部分进行排序。
我被指示……使用 Arrays.sort() 来查找欺骗的索引
编辑:如果您只需要查找任何重复项, Arrays.sort()
可以提供帮助。 排序后,您知道任何重复项最终都在数组中,彼此并排。 所以现在你只需要将每个元素与下一个元素进行比较,而不是与数组的所有其他元素进行比较,以确定是否存在重复项,如果有则查找一个。 但是,通常已排序数组中的第一个副本与未排序数组中的第一个副本不同。
例如: 未排序数组:
["pig", "cow", "queen", "cow", "bee", "bee"]
第一个副本: cow
。 cow
第一个索引:1。
排序后:
["bee", "bee", "cow", "cow", "pig", "queen"]
第一个副本: bee
。 bee
第一个索引:0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.