如何在二维数组中找到素数,并将这些素数复制到另一个数组中



我有一个代码,通过要求用户输入输入来创建2d数组,然后系统检查元素是否是素数,如果它们是素数,系统将把它们复制到1d数组。

我可以创建2d数组,但我被困在素数的检查中,并被复制到第二个数组

这是代码

    package question6;
    import java.util.Scanner;
    public class MtrixPrime {
        public static void main(String[] args) {
            int rows;
            int cols;
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter number of row");
            rows = sc.nextInt();
            System.out.println("Enter number of column");
            cols = sc.nextInt();
            int[][] matrix = new int[rows][cols];
            int[] array = new int[rows];
            System.out.println("Enter numbers in the matrix");
            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix.length; j++) {
                    if(matrix[i][j] % matrix[i][j] ==0 && matrix[i][j] %1 == 0){
////here i am stuck can anyone help me ??
                        array[i * j];
                    }
                    matrix[i][j] = sc.nextInt();
                }
            }
            for(int row = 0 ;row<matrix.length; row++){
                for(int col = 0 ; col< matrix.length; col++){
                    System.out.print(matrix[row][col] + " ");
                }
                System.out.println();
            }
        }
    }

我知道这是一篇旧帖子,但这可能会帮助其他人。使用isPrime作为布尔标志来保存矩阵[i][j]值的状态。如果提醒为0,isPrime将保持矩阵[i][j]的错误状态。

一切都类似于求单个数的素数。只需要使用3作为矩阵索引的循环,在此之前,我已经分别获取了矩阵值。这是代码。

public static void main(String[] args) {
    int rows, cols, remainder;
    boolean isPrime = true;
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter number of row and colums : ");
    rows = sc.nextInt();
    cols = sc.nextInt();
    int[][] matrix = new int[rows][cols];
    System.out.println("Enter numbers in the matrix");
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix.length; j++) {
            matrix[i][j] = sc.nextInt();
        }
    }
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix.length; j++) {
                for (int k = 2; k <= matrix[i][j] / 2; k++) {
                    remainder = matrix[i][j] % k;
                    if (remainder == 0) {
                        isPrime = false;
                        break;
                    }
                }
                if (isPrime) {
                    System.out.println(matrix[i][j] + " is a Prime number");
                } else
                    System.out.println(matrix[i][j] + " is not a Prime number");
            }
        }
   }

需要注意的一件棘手的事情是,由于你不知道会得到多少素数,并且你使用的是正则数组,所以你需要一个1d数组,至少是2d数组的总大小,或者你应该只使用ArrayList。如果你打算使用基元数组,你可以添加一个计数器,每当你找到一个新的素数时,计数器就会增加,并将该计数器值用作索引。然而,这会在数组的后端留下0。如果希望索引与多维数组索引相对应,请将行索引乘以行中的成员数,然后将列索引相加,以获得1d索引,如下所示。这会在数组中的元素之间留下零。有零不一定是坏事,因为它不是素数,但在我看来,使用ArrayList仍然容易得多。

int[][] nums2d = {{0,1,2},{3,4,5},{6,7,8}};
    int[] nums1d = new int[9];
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            int index = i * 3 + j;
            nums1d[index] = nums2d[i][j];
        }
    }

最新更新