我正在编写一个程序来读取包含查询块的文本文件,然后我们将这些查询块放入有向图中,该图表代表该块的人员互联网活动,例如
第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说它没有在叶子部分初始化。我们也尝试将它变成一个类变量,但这不起作用。
答案 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中访问的变量。