Как вывести первые пять элементов матрицы в Java - PullRequest
0 голосов
/ 03 мая 2020

Моя цель состоит в том, чтобы реализовать следующий метод параллельно: publi c stati c double [] [] parallelAddMatrix (double [] [] a, double [] [] b), затем выполнить произвольное тестирование моей программы сгенерировал два списка размером 2000 x 2000. Наконец, я должен вывести первые 5 элементов матрицы a и matrix 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();

Пожалуйста, помогите с этим, и, пожалуйста, скажите, где он будет размещен для каждого (у меня могут быть проблемы с скобками).

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Вам понадобится вложенное значение для l oop для итерации по матрице и счетчик, чтобы увидеть, сколько записей вы напечатали. Давайте начнем с самой простой части: итерации по матрице. Я предполагаю, что матрица просто называется 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, вы можете go для гораздо более простого подхода. Используйте ноль в качестве первого индекса, а затем просто повторяйте до пяти. Просто помните, что это не сработает, если у вас меньше пяти столбцов:

public void print_five_elements_for_wide_matrix() {
    for (int i = 0; i < 5; i++) {
        System.out.println(matrix[0][i]);
    }
}
1 голос
/ 04 мая 2020

Поскольку матрицы имеют размер 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();

Обратите внимание, что вышеприведенные циклы печатают первые 5 элементов первой строки (то есть строки по индексу, 0) каждой матрицы. Однако, если вы хотите напечатать первый элемент первых 5 строк, просто поменяйте местами индексы, например,

System.out.println(matrixA[i][0] + " ");
0 голосов
/ 03 мая 2020

Попробуйте это:

Думайте о первом наборе скобок как о строке, а втором - как о столбце.

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] + " " );
   }
}

Строки различной длины массива "2D" известны как ragged-arrays.

...