开发者

NullPointerException: two collections and a for loop

开发者 https://www.devze.com 2022-12-23 06:56 出处:网络
In another method (ALGO_1) I search over elements of <background> and check the value H_NAME equals a value entered in the main. When I attempt to run the code, I get a null pointer exception. U

In another method (ALGO_1) I search over elements of <background> and check the value H_NAME equals a value entered in the main. When I attempt to run the code, I get a null pointer exception. Upon trying to print (with System.out.println etc) the H_NAME value after each for loop in the snippet, I also get a null statement returned to me.

I am fairly certain that the c开发者_运维知识库ollection is simply not storing the data gathered up by the Scanner. But when I check the collection size with size(), it is about the right size.

Main questions are:

  • from the readBackground method is the data.add in the wrong place?
  • is the snippet simply structured wrongly?

When I use System.out.println to check the Background object values name, start time, increment, etc., they print out fine.

for (Hydro hd: hydros) {        
    System.out.println(hd.H_NAME);  
    for (Background back : backgs) {  
        System.out.println(back.H_NAME);  
        if (back.H_NAME.equals(hydroName)) { //get error here  

            public static Collection<Background> readBackground(String url) throws IOException {

                URL u = new URL(url);
                InputStream is = u.openStream();  
                InputStreamReader isr = new InputStreamReader(is);  
                BufferedReader b = new BufferedReader(isr);  
                String line ="";  
                Vector<Background> data = new Vector<Background>();  
                while ((line = b.readLine())!= null) {  
                    Scanner s = new Scanner(line);  
                    String name = s.next();  
                    double starttime = Double.parseDouble(s.next());  
                    double increment = Double.parseDouble(s.next());  
                    double sum = 0;  
                    double p = 0;  
                    double nterms = 0;  
                    while ((s.hasNextDouble())) {  
                        p = Double.parseDouble(s.next());  
                        nterms++;  
                        sum += p;  
                    }  
                    double pbmean = sum/nterms;  
                    Background SAMP = new Background(name, starttime, increment, pbmean);  
                    data.add(SAMP);  
                }  
                return data;  
            }


If you get a NullPointerException (NPE) when you call back.H_NAME.equals(xxx), it probably means either back is null or back.H_NAME is null.

You say that when you print back.H_NAME, you get null, so that suggests that back.H_NAME is actually null. You haven't shown us any code that describes the class Background, so it's hard to give you any more help.

0

精彩评论

暂无评论...
验证码 换一张
取 消