我目前有一个nxn数组。我计划用无穷大初始化数组中的所有单元格,如果与单元格比较的值低于单元格内的值,则稍后更改它。这是我到目前为止所提出的伪代码,使用-1表示无穷大。你怎么看?这是最有效的方法,任何错误?
if(table[i][j] == -1 || (table[i][j] != -1 && table[i][j] > value)
then table[i][j] = value
答案 0 :(得分:2)
我会以Integer.MAX_VALUE
开头。这样,代码可以更简单:
if(table[i][j] > value) {
table[i][j]=value;
}
请注意,如果您的数组包含双精度数,您甚至可以使用Double.POSITIVE_INFINITY
。
答案 1 :(得分:1)
如果您确定可以将值-1
视为“保留”值,那么您可以采用这种方法。
您还可以考虑将数据类型封装在某些PossiblyInfinitInteger
中,该数据类型的布尔值是否设置为无穷大。也许是一种矫枉过正,我不知道。
答案 2 :(得分:1)
if(table [i][j] == -1 || table[i][j] > value) then ...
也是如此。我不确定,但编译器可能会处理这个问题。-1
被保留,并且值不能小于0
,那么您的方法是正确的,只需比较table[i][j] < value
而不是反之亦然。-1
作为保留值是个问题,请使用Integer.MAX_VALUE:
if(table[i][j] == Integer.MAX_VALUE) then table[i][j] = value;