有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

一维数组中的java三角矩阵get()

我想将一个三角形矩阵保存在一个一维数组中(为了最小化所需的空间,所有的零都被省略),并创建一个函数get()从原始矩阵中找到一个特定的条目

例如:

让我们看看以下三角形矩阵:

0 1 2 3 
0 0 4 5 
0 0 0 6 
0 0 0 0

我这样保存这个矩阵:

double[] test = {1,2,3,4,5,6};

所以所有的零都被省略了

我想写一个函数,给我一个原始矩阵的值:

get(3,4)

应该给我6

我正在检查输入,看它是否越界,是否在对角线上或下方

//Checking if input is valid 
        if (i <= n &&  j <= n && i >= 1 && j >= 1){
            if( j <= i ){
                return 0.0;
            }else {

            }
        }

这很有效

但是我该怎么做呢?我在数组中找不到等价的矩阵项

任何帮助都将不胜感激

编辑:

我的全部代码:

public class dreiecksmatrix {
    int n = 4;
    double[] a = {1,2,3,4,5,6};

    public double get( int i, int j){

        //Checking if input is valid 
        if (i <= n &&  j <= n && i >= 0 && j >= 0){
            if( j <= i ){
                return 0.0;
            }else {

            }
        }

        return 1.0;
    }

    public static void main(String [] args ){
        dreiecksmatrix test = new dreiecksmatrix();
        System.out.println(test.get(2,3));

    }
}

共 (2) 个答案

  1. # 1 楼答案

    如果改为按列存储矩阵,则有一个简单的公式,用于i,j'矩阵元素的索引测试

    在你的例子中,你会

    double[] test = {1,2,4,3,5,6};
    

    如果Col(i)是第i列开头的索引 然后

      Col(2) = 0
      Col(3) = Col(2) + 1
    ..
      Col(n) = Col(n-1) + n-1
    

    因此

    Col(j)=((j-1)*(j-2))/2

    i,j矩阵元素从列j的开始处进一步存储i, 即Col(j)+i,因此您应该添加

      return test[ ((j-1)*(j-2))/2 + i];
    

    到你的代码

    如果必须按行而不是按列存储,则有一个类似的公式。有点乱。其思想是首先从最后一个非零行开始,计算行的端点在哪里

  2. # 2 楼答案

    下面是计算顶部三角形值的示例代码。还没有像i,j >= 1这样的角案例检查,但是添加它们很容易

    &13; 第13部分,;
    arr = [[0, 1, 2, 3, 4],
           [0, 0, 5, 6, 7],
           [0, 0, 0, 8, 9],
           [0, 0, 0, 0, 10],
           [0, 0, 0, 0, 0]];
    
    flatArr = [1,2,3,4,5,6,7,8,9,10];
    
    n = 5; // matrix size
    i = 1; 
    j = 3;
    
    if (j <= i) {
    
        alert(0);
    
    } else {
        pos = 0;
        // find an offset caused by first (i - 1) lines
        for (k = 1; k < i; k++) {
           pos += n - k;
        }
    
        // find an offset in line x
        pos += j - i;
    
        // array index start from 0 so decrement value
        pos = pos - 1;
    
        alert('flatArr[' + pos + '] = ' + flatArr[pos]);
    }
    和#13;
    和#13;