【问题标题】:NullPointerException: two collections and a for loopNullPointerException:两个集合和一个 for 循环
【发布时间】:2010-03-20 01:22:34
【问题描述】:

在另一种方法 (ALGO_1) 中,我搜索 <background> 的元素并检查值 H_NAME 是否等于在 main 中输入的值。当我尝试运行代码时,我得到一个空指针异常。在尝试在 sn-p 中的每个 for 循环之后打印(使用 System.out.println 等)H_NAME 值时,我还收到一个返回给我的空语句。

我相当确定该集合根本没有存储扫描仪收集的数据。但是当我使用size() 检查集合大小时,它的大小大约是正确的。

主要问题是:

  • readBackground 方法中的 data.add 是不是放错地方了?
  • sn-p 是不是结构错误?

当我使用System.out.println 检查背景对象值名称、开始时间、增量等时,它们打印出来的效果很好。

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;  
            }

【问题讨论】:

  • 好吧,对于初学者,您可能想尝试格式化代码,使其更具可读性。你也可以考虑让我们看看剩下的部分,因为肯定少了一些东西。

标签: c# for-loop collections nullpointerexception nested-loops


【解决方案1】:

如果您在调用 back.H_NAME.equals(xxx) 时收到 NullPointerException (NPE),这可能意味着 back 为 null 或 back.H_NAME 为 null。

您说当您打印back.H_NAME 时,您会得到空值,这表明back.H_NAME 实际上是空值。您还没有向我们展示任何描述类 Background 的代码,因此很难为您提供更多帮助。

【讨论】:

  • 没错,我想我可能错过了什么。这是背景的代码。谢谢。公共类背景 { String H_NAME;双T_START;双DT;双 PBMEAN;公共背景(字符串名称,双启动时间,双增量,双 pbmean){ name = H_NAME;开始时间 = T_START;增量 = DT; pbmean = PBMEAN; } }
  • 是的,当我使用检查 H_NAME 变量的方法时,我认为它绝对为空,我只是无法弄清楚原因。因为如果我打印出创建 的方法的步骤,那么肯定会读取数据......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2012-04-14
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多