【问题标题】:Check if the given Matrix has Valid dimensions - JAVA检查给定的矩阵是否具有有效维度 - JAVA
【发布时间】:2020-05-24 20:04:43
【问题描述】:

我想检查给定的 Matrix 是否具有有效尺寸。 下面的这个 Matrix 有 Invalid Dim 因为它不满足 Matrix 属性

Matrix x = new Matrix(new double[][]{
                { 1.0, 2.0, 3.0},
                { 4.0, 5.0 }
        }) 

我尝试了几种方法,最新的是:

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (array[i][j] = null) {
                    throw new InvalidDimensionsException("Invalid Dim");
                }
            }
        }

只是它不是null,它只是那里没有元素! 不幸的是,没有任何效果,我的想法用完了。

很高兴听到你的建议

提前致谢

【问题讨论】:

  • 无效部分是:{ 1.0, 2.0, 3.0}, { 4.0, 5.0,x } 其中 x 应该有一个元素,否则它是 Invalid Matrix Dim 所有行和列都必须包含一个元素跨度>

标签: java arrays matrix 2d


【解决方案1】:

double[][] 的单元格不能为空,因此问题中的代码毫无意义,尤其是因为它无法编译(= 应该是==)。

要验证二维数组是否为矩形,即有效矩阵,请执行以下操作:

double[][] matrix = {
        { 1.0, 2.0, 3.0},
        { 4.0, 5.0 }
};
int height = matrix.length;
if (height == 0)
    throw new InvalidDimensionsException("Invalid Dim");
int width = matrix[0].length;
if (width == 0)
    throw new InvalidDimensionsException("Invalid Dim");
for (int y = 1; y < height; y++)
    if (matrix[y].length != width)
        throw new InvalidDimensionsException("Invalid Dim");

代码将抛出NullPointerException 是任何数组null

【讨论】:

  • 此代码有效,但空矩阵有效。您可以拥有 0x0、10x0、0x5 等矩阵
  • @user 这由 OP 决定 empty matrix 是否被认为是有效的,并相应地调整此处显示的代码。必须测试高度为零以防止异常,但如果需要,OP 可以选择不同的操作。
  • 好的。我假设 OP 将使用数学定义,但我猜他们的具体用例可能不同
【解决方案2】:

如果您知道矩阵必须具有的列数,则可以检查其中每个一维数组的大小。

double[][] mat = ...; //get the underlying array from the matrix
for (double[] arr : mat) if (arr.length != numCols) throw new InvalidDimensionsException(...);

否则,您可以取第一行的大小并检查所有行的长度是否相同。

//If it's empty, there's no point checking further
if (mat.length != 0) {
  //All the rows should have this same length
  int numCols = mat[0].length;
  for (int i = 1; i < mat.length; i ++)
    if (mat[i].length != numCols) throw new InvalidDimensionsException(...);
}

【讨论】:

    猜你喜欢
    • 2016-09-06
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多