Java 由于NullPointerException而导致的错误
课堂测试Java 由于NullPointerException而导致的错误,java,nullpointerexception,jsoup,Java,Nullpointerexception,Jsoup,课堂测试 package test; import java.io.IOException; import org.jsoup.*; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.util.Scanner; public class test { public static void main(String[] a
package test;
import java.io.IOException;
import org.jsoup.*;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.Scanner;
public class test {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
String url, artistIn, artist, base;
SongUrl[] obj = new SongUrl[100];
base = "http://lyrics.wikia.com/";
int count = 0;
System.out.println("Enter an artist");
artistIn = in.nextLine();
artist = artistIn.replace(' ', '_');
url = "http://lyrics.wikia.com/api.php?func=getSong&artist=" + artist + "&fmt=html";
Document doc = Jsoup.connect(url).get();
Elements a = doc.select("a[href]");
for(Element alink : a){
obj[count] = new SongUrl();
obj[count].urlSong = alink.toString();
count++;
obj[count].serialNo = count; //Faced NPE on this line
System.out.println(count + " " + alink.html());
}
}
}
类SongUrl
public class SongUrl {
int serialNo;
String urlSong;
}
我在线路上遇到了NullPointerException
obj[count].serialNo=count代码>。令人惊讶的是,如果要发生NPE,它应该发生在这一行obj[count].urlSong=alink.toString()代码>它之前的代码。我不知道出了什么问题。您增加了计数
,现在它指向数组中的下一项null
obj[count].urlSong = alink.toString();
count++; // this is causing the issue
obj[count].serialNo = count; // obj[count] is null
增加for循环末尾的计数
我建议您在声明下方进行初始化,以避免此类NullPointerException
SongUrl[] obj = new SongUrl[100];
for(int i=0;i<obj.length;i++){
obj[i] = new SongUrl();
}
在设置serialNo
之前增加count
——由于数组的此索引尚未初始化,因此将得到NullPointerException
。为了避免这种情况,您应该增加count
last:
obj[count] = new SongUrl();
obj[count].urlSong = alink.toString();
obj[count].serialNo = count + 1; // Note the +1 - count is incremented afterwards
count++;
您在这两行之间增加了count
。
obj[count] = new SongUrl();
obj[count].urlSong = alink.toString();
obj[count].serialNo = count + 1; // Note the +1 - count is incremented afterwards
count++;