【问题标题】:How to print first five elements of an matrix in Java如何在Java中打印矩阵的前五个元素
【发布时间】:2020-05-03 19:49:50
【问题描述】:

我的目标是并行实现以下方法: public static double[][] parallelAddMatrix(double[][] a, double[][] b),然后在随机生成的两个大小为 2000 x 2000 的列表上测试我的程序。最后我必须输出矩阵的前 5 个元素a 和矩阵 b,以及结果矩阵的前五个元素,这就是我遇到的问题。

这是我创建第一个和第二个矩阵的代码部分。

public static void main(String[] args) {
    int var1, var2;
    final int matrices = 2000;

    // creates first matrix
    double[][] matrixA = new double[matrices][matrices];
    for(var1 = 0; var1 < matrixA.length; var1++)
        for (var2 = 0; var2 < matrixA[var1].length; var2++)
            matrixA[var1][var2] = 1;

    // creates second matrix
    double[][] matrixB = new double[matrices][matrices];
    for (var1 = 0; var1 < matrixB.length; var1++)
        for (var2 = 0; var2 < matrixB[var1].length; var2++)
            matrixB[var1][var2] = 1;

然后后来创建了一个函数来创建结果矩阵...

public static double[][] parallelAddMatrix( double [][] a, double[][] b) {
    //creates output matrix
    double[][] resultMatrix = new double[a.length][a[0].length];
    RecursiveAction task = new multiProcess(a, b, resultMatrix);
    ForkJoinPool joinPool = new ForkJoinPool();
    joinPool.invoke(task);
    return resultMatrix;
}

如何打印出三个矩阵中每一个的前五个元素?

我已经为第一个和第二个矩阵尝试了一些东西,例如初始化 var3,然后在“matrixA(orB)[var1][var2] = 1;”下,我把

for (var3 = 0; var3 < 5; var3++) {
System.out.println(var3);
}

也试过了

for (var3 = 0; var3 < 5; var3++) {
   System.out.print(matrixA[var1][var2] + "");
}
System.out.println();

请对此提供帮助,并请告诉每个人将其放置在哪里(我可能对括号有问题)。

【问题讨论】:

  • 您想按行或按列打印前 5 个元素?根据这一点,只需使用 for 循环,并使用一个索引常量和另一个从 0 到 4 变化的索引进行迭代。

标签: java arrays matrix


【解决方案1】:

您需要一个嵌套的 for 循环来遍历矩阵,还需要一个计数器来查看您打印了多少条目。让我们从最简单的部分开始:遍历矩阵。我假设矩阵被简单地称为matrix

for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.println(matrix[i][j]);
    }
}

你可能已经想通了。现在我们需要一个计数器来计算我们从矩阵中打印出一个条目的次数。

int num_printed = 0;
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.println(matrix[i][j]);
        num_printed ++;
    }
}

好的。所以现在我们需要在到达终点时停下来。我们不能只使用一个 break 语句,因为我们有两个 for 循环。

int num_printed = 0;

for (int i = 0; i < matrix.length; i++) { // iterate over the rows
    for (int j = 0; j < matrix[i].length; j++) { // iterate over the columns
        if (num_printed == 5) { // if we've already printed five items, stop
            break;
        } else { // otherwise, print the next item
            System.out.println(matrix[i][j]);
            num_printed ++; // increment the counter
        }
    }

    if (num_printed == 5) { // so that we don't go to the next row
        break;
    }
}

值得注意的是,您可以创建自己的单独方法,并且只使用 return 语句:

public void print_five_elements() {
    int num_printed = 0;
    for (int i = 0; i < matrix.length; i++) { // iterate over the rows
        for (int j = 0; j < matrix[i].length; j++) { // iterate over the columns
            if (num_printed == 5) { // if we've already printed five items, stop
                return;
            } else { // otherwise, print the next item
                System.out.println(matrix[i][j]);
                num_printed ++; // increment the counter
            }
        }
    }
}

更专业的方法

这种方法允许您使用少于五列的矩阵。但是,由于您的矩阵是 2000x2000,您可以采用更简单的方法。使用零作为第一个索引,然后最多迭代五个。请记住,如果您的列少于五列,这将不起作用:

public void print_five_elements_for_wide_matrix() {
    for (int i = 0; i < 5; i++) {
        System.out.println(matrix[0][i]);
    }
}

【讨论】:

  • 为什么需要嵌套循环?因为已经提到矩阵是 2000*2000。只需使用一个具有一个恒定索引和另一个从 0 到 4(包括)变化的循环,就可以实现所需的结果。
  • @vatsalgosar 你是对的。如果矩阵在某些点最终少于五行,我使我的答案更具可配置性。我会编辑它。
【解决方案2】:

由于矩阵的大小为 2000 x 2000,因此您不需要嵌套循环来显示每个矩阵中的第一个 5 元素。

int i;

//Display first 5 elements of matrixA
for(i=0; i<5; i++) {
    System.out.print(matrixA[0][i] + " ");
}
System.out.println();

//Display first 5 elements of matrixB
for(i=0; i<5; i++) {
    System.out.print(matrixB[0][i] + " ");
}
System.out.println();

double[][] result = parallelAddMatrix(matrixA, matrixB);
//Display first 5 elements of result
for(i=0; i<5; i++) {
    System.out.print(result[0][i] + " ");
}
System.out.println();

请注意,上述循环打印每个矩阵的第一行(即索引处的行,0)的前 5 个元素。但是,如果要打印前 5 行的第一个元素,只需交换索引,例如

System.out.println(matrixA[i][0] + " ");

【讨论】:

    【解决方案3】:

    试试这个:

    将第一组括号视为行,将第二组视为列。

    for (int row = 0; row < 5; row++) {
       for (int col = 0; col < 5; col++) {
         System.out.print(matrixA[row][col] + " ");
       }
       System.out.println();
    }
    

    由于“多维”数组实际上是数组的数组,如果你想打印出整个矩阵,你可以这样做

    for (double[] row : matrixA) {
       System.out.println(Arrays.toString(row));
    }
    

    因此,每一行可以有不同的长度。因此,您可能必须像最初想要的那样获得打印出来的长度。

    for (int row = 0; row < matrixA.length; row++) {
       for (int col = 0; col < matrixA[row].length; col++) {
           System.out.print(matrixA[row][col] + " " );
       }
    }
    

    “二维”数组中不同长度的行称为ragged-arrays

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多