我在我评论的2行中获得了NPE" NPE HERE"
import javax.swing.*;
import java.awt.*;
public class Project1{
static TextArea preSort, postSort;
static String[] Array = new String[20];
public static void main(String[] args) {
Project1GUI myFrame = new Project1GUI("Project1GUI");
readStringFromFile("filename.txt");
enterFirst(Array); // NPE HERE
selectionSort(Array);
enterSecond(Array);
}
public static void enterFirst (String[] name){ // NPE HERE
for(int i=0;i<name.length&&name[i]!=null;i++)
preSort.append(name[i]+" ");
}
public static void enterSecond (String[] name){
for(int i=0;i<name.length&&name[i]!=null;i++)
postSort.append(name[i]+" ");
}
public static void selectionSort (String[] name){
for(int i=0; i<name.length-1&&name[i]!=null;i++){
int indexLowest=i;
for (int j=i+1; j<name.length&&name[j]!=null;j++)
if(name[j]<name[indexLowest])
indexLowest=j;
if(name[indexLowest]!=name[i]){
String temp = name[indexLowest];
name[indexLowest]=name[i];
name[i]=temp;
}//if
}//for
}//method selectionSort
public static boolean isOkay (String name){
char[] chars = name.toCharArray();
for(int i=0; i<chars.length; i++){
if(!Character.isLetter(chars[i])){
return false;
}
}
return true;
} //isOkay
public static void readStringFromFile(String fileName){
TextFileInput inFile = new TextFileInput(fileName);
String line;
line = inFile.readLine();
int index = 0;
while (line!=null) {
if(isOkay(line))Array[index++]=line;
else System.out.println(line);
line = inFile.readLine();
}//while
inFile.close();
}
} //Project1
我的目录中有另外两个类,TextFileInput和我的GUI类(你们还需要在那里查看代码吗?)。 我的代码可能有更多的错误,不确定,因为我还不是很熟悉Java并且正在努力学习。任何其他建议将不胜感激。
无论如何,导致NPE的原因是什么?根据我的理解,当我尝试使用name [i]访问数组时,我的字符串数组具有导致NPE的空值。 我尝试用假人填充剩余的阵列(值为&#34的字符串; antinull&#34;)但是这并没有解决任何问题,即使它是一个优雅的解决方案也是如此之一。
我只需要一个project1类和一个GUI类。目标是接收带有字符串的文件,检查字符串是否都是字母,并将实际单词发送到GUI中的文本区域。然后按大小排序并将订购的版本发送到其他文本区域。不发送字符串的字符串将被输出到控制台。 Project1应该有一个构造函数,它接受一个字符串参数。
答案 0 :(得分:1)
当您致电preSort.append(...)
时,您正在从变量(preSort
)调用方法,该变量未初始化,因此null
会导致NullPointerException
。例如,如果您在main方法中初始化preSort
,事情会更好。
您还应该考虑正确缩进代码并使用正确的Java命名标准。变量应该是camelCased,而不是以大写字母开头。
答案 1 :(得分:0)
我认为你在调用enterFirst(Array)
时没有出现空指针错误。循环甚至不应该执行,因为Array
的第一个值是null。但是您可能会收到空指针错误,因为preSort
变量不引用任何对象。
尝试:
static TextArea preSort = new TextArea(5, 20);
和
static TextArea postSort = new TextArea(5, 20);