【问题标题】:how to find prime number in 2d array and copy these numbers to another array如何在二维数组中找到素数并将这些数字复制到另一个数组
【发布时间】:2015-02-04 20:45:44
【问题描述】:

我有一个代码通过要求用户输入输入来创建二维数组,而不是系统检查元素是否为素数,如果它们是素数,系统会将它们复制到一维数组。

我可以创建二维数组,但我卡在检查素数并复制到第二个数组

这是代码

    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();
            }
        }
    }

【问题讨论】:

  • 您的代码中只有一种方法,您是否忘记包含其中的一部分?另外,你的问题到底是什么?你有错误吗?如果有,是什么?
  • 任何数字 % 1 都将是 0。总是。这是因为除以 1 时没有余数(即每个数都可以被 1 整除)。
  • 不,这是大厅代码,我想要创建一个多维数组,而不是检查输入的数字是否为素数,并且必须将素数复制到另一个数组
  • @Brian 我知道,但我没有找到其他方法来解释我的代码
  • @JNYRanger 抱歉我没有改标题的错误

标签: java arrays for-loop multidimensional-array


【解决方案1】:

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

一切都类似于寻找单个数字的素数。只需对矩阵索引使用 3 个 for 循环,在此之前我已分别获取矩阵值。 这是代码。

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

【讨论】:

    【解决方案2】:

    需要注意的一件棘手的事情是,由于您不知道要获得多少素数,并且您使用的是常规数组,因此您需要一个至少是二维数组的总大小的一维数组,或者您应该只使用 ArrayList。如果您打算使用原始数组,则可以添加一个计数器,每次找到新素数时该计数器都会增加,并将该计数器值用作索引。但是,这会使您在数组的后端留下零。如果您希望您的索引对应于多维数组索引,请将行索引乘以行中的成员数,然后添加列索引以获得一维索引,如下所示。这将使您在数组中的元素之间留下零。零不一定是坏事,因为它不是素数,但在我看来,使用 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];
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-31
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多