Java在循环中单独进行类初始化

时间:2016-12-13 21:38:43

标签: java loops

我正在编写一个程序来读取包含查询块的文本文件,然后我们将这些查询块放入有向图中,该图表代表该块的人员互联网活动,例如

第1块

reddit.com reddit.com/r/CS

这将创建一个树,其中一个根和一个节点,第一行是根。

我的问题是我有一个名为breakApart的类,它读取文本文件并为每个块创建一个单独的树并填充它。我不会发布完整的代码,但我会准确发布初始化问题所在的位置。

代码

while (thisLine != blank && thisLine != null)//loop for text block
                 {
                  if (thisLine.equals(blank))
                  {
                      if (thisLine.startsWith("(http") || thisLine.startsWith("http")) //ROOT NODE CREATION, THUS NEW BreakApart class to make new tree
                         {
                            BreakApart ba = new BreakApart(new MyGraph());
                            ret = ba.breakApart(thisLine);
                            OVA.put(ret.t, ret.u);
                            l.add(ret.t);
                         }
                  }

                else
                 {
                     if (thisLine.startsWith("(http")||thisLine.startsWith("http")) //LEAF CREATION, we only want to add to breakapart instanciated about
                     {
                        ret = ba.breakApart(thisLine); //This line is the issue it says ba is not initilized, but the way the file is implemented a root is always firs
                        OVA.put(ret.t, ret.u);
                        l.add(ret.t);
                     }
                 }

                     thisLine = reader.readLine();
                 } 

问题是我们需要在这里创建一个新的BreakApart类(包含树),而当读入行是根时,我们需要有一个if else或一些条件,并且我们需要简单地添加到该树时是一片叶子。但是如你所见,ba说它没有在叶子部分初始化。我们也尝试将它变成一个类变量,但这不起作用。

2 个答案:

答案 0 :(得分:0)

您应该将ba变量的声明移到循环之上,以便在else语句中知道它。

BreakApart ba = null;
while (thisLine != blank && thisLine != null)//loop for text block

答案 1 :(得分:-1)

请移动

BreakApart ba = new BreakApart(new MyGraph());
行前

while (thisLine != blank && thisLine != null)

您尝试访问的ba未初始化,因为您在单独的范围内进行类实例化。如果你把它放在上面提到的行之前,你将创建一个可以在所有即将到来的"子" -scopes中访问的变量。