我已经在一个年级里学习了三个月的Java,现在我正在重做我们之前做过的一些练习,并且我做了一个我之前做不到的练习。 措辞如下: 编写一个程序,通过扫描程序启动NxN的matrhix,并告诉是否存在与某些列完全相同的行,加入相同的行和列的索引。 例如,如果我们有下一个二维数组:
0 1 2
0 [1] [2] [1]
1 [4] [8] [2]
2 [3] [5] [1]
程序会告诉我,第0行与第2列相同。 抱歉我的英语不好,我是西班牙语。 所以这就是我所做的代码:
package Arrays;
public class Ejercicio16 {
public static void main(String[] args) {
int matrix[][];
int i, j;
int rows, columns;
boolean same = false;
//1.Ask inf of the matrix to the user.
do{
rows = Teclado.nextInt("Insert the number of rows of the matrix");
columns = Teclado.nextInt("Insert the number of columns of the matrix");
}while(rows<=0 && columns<=0);
/*Teclado = A java class that I use with methos like nextInt, nextByte, etc with their try catchs and so on.It would be a Scanner method*/
matrix = new int[rows][columns];
for (i=0; i<rows; i++) {
for (j=0; j<columns; j++){
matrix[i][j] = Teclado.nextInt("Insert a value for the cell of the row: "+ i + " column: " + j);
}
}
//4. Show the matrix inserted by the user.
for (i=0; i<rows; i++){
for (j=0; j<columns; j++){
System.out.print( "[" + matrix[i][j] + "]" + " ");
}
System.out.println();
}
checkEquality(matrix, rows, columns, same);
}
public static boolean comprobarIgualdad(int matriz[][], int filas, int columnas, boolean igual){
int i, j;
for (i=0; i<rows; i++){
for (j=0; j<columns; j++){
if(matrix[i] == matrix[j])
same = true;
else
same = false;
}
}
return same;
}
}
现在,我的问题是:我不知道如何使方法垂直和水平地超过矩阵并检查它们是否相同。我这些天一直在想,但我找不到答案,所以我想在这里寻求帮助。我想自己解决这个问题,但我想我不能,所以任何帮助都很受欢迎。如果您对我的代码有任何疑问,请告诉我!
答案 0 :(得分:0)
嗯,如您所知,在二维数组上运行总是在嵌套循环中完成。您必须使用每个可能的星座(即,第0行和第0列,第0行和第1列,第0行和第2列,第1行和第0列,......)调用checkEquality()
。
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (checkEquality(matrix, i, j)) // no need for same here in my opinion
System.out.println("Row " + i + " and " + " column " + j + " are equal.");
}
}
[...]
private static boolean checkEquality(int[][] matrix, int row, int column) {
for (int i = 0; i < matrix.length; i++) { // only works if number of rows equal number of columns
if (matrix[row][i] != matrix[i][column]) { // running through rows and columns
// if a single value is not equal you can stop searching and return false
return false;
}
}
return true; // otherwise it is true
}
答案 1 :(得分:0)
如果行的长度与cols相同,则可以尝试此操作。
private boolean checkRowsEquality(int[][] matrix, int row, int col) {
for (int i = 0; i < matrix.length; i++) {
if (matrix[row][i] != matrix[i][col])
return false;
}
return true;
}
private boolean checkEquality(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
if (checkEquality(matrix, i, j))
return true;
}
}
return false;
}
我希望它有所帮助。我也来自西班牙。 Suerte:D