我有一个代码,通过要求用户输入输入来创建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];
}
}