这是我到目前为止所获得的代码,但是我的程序说我无法将int []转换为int在第34行(对于(int i:m1)"
\n\r
我为这个程序使用了2个类。 IdenticalArrays是另一个 class,equals是该类中确定是否的方法 数组彼此相等。现在我的编译器说 它无法找到符号,而且箭头指向的是箭头。在 " IdenticalArrays.equals&#34 ;.为什么不明白这是什么 是
public static boolean equals(int [][] m1, int [][] m2)
{
boolean val = false;
int ct = 0;
for(int i:m1)
{
for(int row = 0; row < m1.length; row++)
{
for(int column = 0; column < m1[row].length; column++)
{
val = false;
for(int row2 = 0; row2 < m2.length; row2++)
{
for(int column2 = ct; column2 < m2[row2].length; column2++)
{
if(m2[column2] == row2)
{
val = true;
ct++;
break;
}
}
}
}
}
}
return val;
答案 0 :(得分:0)
这应该完全符合你的需要。希望它有所帮助!
public class Program {
static int[][] arr1 = { { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } };
static int[][] arr2 = { { 7, 8, 9, 10, 6 }, { 15, 14, 13, 12, 11 } };
public static void main(String[] args) {
int lowest;
int switcher;
int posX = -1;
int posY = -1;
for (int i = 0; i < arr2.length; i++) {
for (int z = 0; z < arr2[i].length; z++) {
lowest = arr2[i][z];
for (int x = i; x < arr2.length; x++) {
if (x == i)
for (int y = z; y < arr2[x].length; y++) {
if (arr2[x][y] <= lowest) {
lowest = arr2[x][y];
posX = x;
posY = y;
}
}
else
for (int y = 0; y < arr2[x].length; y++) {
if (arr2[x][y] <= lowest) {
lowest = arr2[x][y];
posX = x;
posY = y;
}
}
;
}
switcher = arr2[i][z];
arr2[i][z] = arr2[posX][posY];
arr2[posX][posY] = switcher;
}
}
System.out.println(equals(arr1, arr2));
}
public static boolean equals(int[][] m1, int[][] m2) {
for (int x = 0; x < m1.length; x++) {
for (int y = 0; y < m1[x].length; y++) {
if (m1[x][y] != m2[x][y]) {
return false;
}
}
}
return true;
}
}
答案 1 :(得分:0)
您还没有给出相同的&#34;明确的定义。让我们一个接一个地从最严格到最宽松的定义:
[ [1,2], [3,4] ]
与[ [4,3], [2,1] ]
[ [1,2], [3,4] ]
与[ [1,3], [2,4] ]
[ [1,1], [2,3] ]
与[ [1,2], [2,3] ]
这可以通过
轻松完成Map<Integer, Integer>
,存储每个数字的计数(让我们称之为规范化数字数组)Map< Map<Integer,Integer>, Integer>
,存储每个规范化数字数组的计数[ [1,2], [3,4] ]
与[ [1,3], [2,4] ]
[ [1,1], [2,3] ]
与[ [1,2], [2,3] ]
可以通过
轻松完成Map<Integer, Integer>
Map<Integer,Integer>
equals()
即可
[ [1,1], [2,3] ]
与[ [1,2], [2,3] ]
它甚至可以更容易:
Set<Integer>
Set<Integer>
equals()
s
醇>
以下是最松散形式的伪代码:
static Set<Integer> toIntegerSet(int[][] intArray) {
Set<Integer> intSet = new HashSet<Integer>();
for (int[] a : intArray) {
for (int i : a) {
intSet.add(i);
}
}
}
static boolean isIdentical(int[][] a1, int[][] a2) {
return toIntegerSet(a1).equals(toIntegerSet(a2));
}
你的编译器抱怨的原因是你甚至没有正确的语法:
if(IdenticalArrays.equals == true)
应该是
if(IdenticalArrays.equals(array1, array2) == true)
甚至更好,简单
if(IdenticalArrays.equals(array1, array2))
答案 2 :(得分:0)
// the arrays
int a1[] = {1, 2, 3};
int a2[] = {2, 3, 1};
// copy array to don't modify originals
int[] a1Temp = Arrays.copyOf(a1, a2.length);
int[] a2Temp = Arrays.copyOf(a2, a2.length);
// sort the temp arrays
Arrays.sort(a1Temp);
Arrays.sort(a2Temp);
// check if temp arrays are equals
boolean test = Arrays.equals(a1Temp, a2Temp);
System.out.println(test);
// to large arrays, these operations have a coast 2xO(n log n)+3xn