2010-03-20 57 views
0

在另一种方法(ALGO_1)中,我搜索<background>的元素并检查值H_NAME是否等于输入到main中的值。当我尝试运行代码时,出现空指针异常。在尝试打印(在System.out.println等中)每个for循环后面的H_NAME值时,我也会收到一条返回给我的空语句。NullPointerException:两个集合和一个for循环

我相当确定这个集合根本不存储扫描器收集的数据。但是当我用size()检查收藏尺寸时,它的尺寸是正确的。

主要问题是:

  • 从readBackground方法是放错了地方的data.add?
  • 是错误地简单构造的片段?

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

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

那么,对于初学者,您可能想尝试格式化代码,使其更具可读性。你也可以考虑让我们看看其余部分,因为必须有一些东西丢失。 – 2010-03-20 01:58:34

回答

0

如果你得到一个NullPointerException(NPE)当你调用back.H_NAME.equals(xxx),它可能意味着要么back为空或back.H_NAME为空。

你说当你打印back.H_NAME时,你会得到空,所以暗示back.H_NAME实际上是空的。您没有向我们展示任何描述类Background的代码,因此很难再给您任何帮助。

+0

真的,我以为我可能错过了一些东西。这是Background的代码。谢谢。 公共课程背景{ \t String H_NAME; \t double T_START; \t double DT; \t double PBMEAN; \t \t \t \t 公共背景(字符串名称,开始时间加倍,双增量,双pbmean){ \t \t 名称= h_name复制; \t starttime = T_START; \t increment = DT; \t pbmean = PBMEAN; \t \t \t} } – Elliott 2010-03-20 10:20:59

+0

是的,我认为它肯定是由时间,我得到的方法检查h_name复制变量,我只是不能工作了,为什么空。因为如果我打印出创建数据的方法的步骤肯定正在读取...... – Elliott 2010-03-20 10:23:57