Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NullPointerException:两个集合和一个for循环_C#_For Loop_Collections_Nullpointerexception_Nested Loops - Fatal编程技术网

C# NullPointerException:两个集合和一个for循环

C# NullPointerException:两个集合和一个for循环,c#,for-loop,collections,nullpointerexception,nested-loops,C#,For Loop,Collections,Nullpointerexception,Nested Loops,在另一种方法Algou_1中,我搜索元素,并检查H_NAME的值是否等于在main中输入的值。当我试图运行代码时,我得到一个空指针异常。在尝试使用System.out.println等打印代码段中每个for循环后的H_NAME值时,我还得到一条返回给我的null语句 我相当肯定,收集的数据并没有存储扫描仪收集的数据。但当我用大小检查集合大小时,它大约是正确的大小 主要问题是: readBackground方法中的data.add是否位于错误的位置? 这段代码是否只是结构错误? 当我使用Syste

在另一种方法Algou_1中,我搜索元素,并检查H_NAME的值是否等于在main中输入的值。当我试图运行代码时,我得到一个空指针异常。在尝试使用System.out.println等打印代码段中每个for循环后的H_NAME值时,我还得到一条返回给我的null语句

我相当肯定,收集的数据并没有存储扫描仪收集的数据。但当我用大小检查集合大小时,它大约是正确的大小

主要问题是:

readBackground方法中的data.add是否位于错误的位置? 这段代码是否只是结构错误? 当我使用System.out.println检查背景对象值name、start time、increment等时,它们可以很好地打印出来

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

如果在调用back.H_NAME.equalsxxx时得到NullPointerException NPE,则可能意味着back为null或back.H_NAME为null


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

对于初学者,您可能希望尝试格式化代码,使其更具可读性。你也可以考虑让我们看看剩下的,因为肯定有一些东西丢失了。真的,我想我可能错过了什么。这是背景代码。谢谢公共类背景{String H_NAME;double T_START;double DT;double PBMEAN;公共背景字符串NAME,double starttime,double increment,double PBMEAN{NAME=H_NAME;starttime=T_START;increment=DT;PBMEAN=PBMEAN;}是的,我想当我找到检查H_NAME变量的方法时,它肯定是空的,我只是不知道为什么。因为如果我打印出创建数据的方法的步骤,肯定会被读取。。。