【发布时间】:2014-12-18 12:23:24
【问题描述】:
我目前正在创建一个使用 SparseMatrixNode 的稀疏矩阵程序:
public SparseMatrixNode(int row, int col, int value, SparseMatrixNode down, SparseMatrixNode across)
{
this.row = row;
this.col = col;
this.value = value;
this.down = down;
this.across = across;
}
我的程序像这样创建模板稀疏矩阵:
public SparseMatrix()
{
noofrows=noofcols=0;
// create the top-left entry point cell
root=new SparseMatrixNode(0, 0, 0, new SparseMatrixNode(0, 0, 0, null, null), new SparseMatrixNode(0, 0, 0, null, null));
}
public void Create(int noofrows, int noofcols)
{
this.noofrows=noofrows;
this.noofcols=noofcols;
root=new SparseMatrixNode(0, 0, 0, new SparseMatrixNode(noofrows+1, 0, 0, null, null), new SparseMatrixNode(0, noofcols+1, 0, null, null));
}
这是我的 SetValue 函数,它接受提供的三个整数值来替换当前值或创建一个新节点并将其插入到稀疏矩阵中。
public void SetValue(int row, int col, int value)
{
if (value == 0)
{
return;
}
else
{
SparseMatrixNode checkNode = FindNode(row, col);
if (checkNode.value != 0)
{
checkNode.setValue(value);
}
//SparseMatrixNode dummyRow = root.FindRow(row);
if (root.down.row == 5)
{
root.down = new SparseMatrixNode(row, 0, 0, null, new SparseMatrixNode(row, col, value, null, null));
root.across = new SparseMatrixNode(0, col, 0, new SparseMatrixNode(row, col, value, null, null), null);
}
}
但是,当我基于 4x4 网格测试我的代码并调用 SetValue(1, 2, 5) 时,它只会输出一个 0 的网格。 我一直在尝试单步执行我的代码并找出它为什么不输入新节点的原因,但是我已经被困了几个小时,想知道是否有人可以对这种情况有所了解?
所以我的问题是:为什么我的 SetValue 函数不创建新节点并将其链接到“虚拟”属性(第 0 行第 0 列)?
【问题讨论】:
标签: java matrix sparse-matrix