我正在尝试从对角线数组中删除重复项。 如果您运行我的代码,您将更好地理解我正在尝试做的事情。
我想从该帮助程序数组中删除重复项,但我的重复部分代码适用于所有数字而不是该对角线部分。此外,请不要包含收藏的答案。 这是我遇到麻烦的部分:
boolean dup = false;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j <array[i].length; j++) {
if (i+j ==array.length-1){
if(i == j) {
System.out.println("Duplicate "+array[i][j]);
}
if(array[i] ==array[j]){
System.out.println("Duplicate "+array[i][j]);
dup = true;
break;
}
System.out.print(array[i][j] + " ");
}
else System.out.print(" " + " ");
}
System.out.println();
}
以下是整个事情:
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter length of N array: ");
int n = input.nextInt();
System.out.print("Enter length of M array: ");
int m = input.nextInt();
intarray[][] = new int[n][m];
Random rand = new Random();
System.out.print("Random nums:");
for (int i = 0; i <array.length; i++) {
for (int j = 0; j <array[i].length; j++) {
System.out.print("X[" +i+ "," +j +"]"+ "-->");
array[i][j] = rand.nextInt(10);
}
}
for (int i = 0; i <array.length; i++) {
System.out.println();
for (int j = 0; j <array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
}
System.out.println();
System.out.println("Numbers: ");
boolean dup = false;
for (int i = 0; i <array.length; i++) {
for (int j = 0; j <array[i].length; j++) {
if (i+j ==array.length-1){
if(i == j) {
System.out.println("Duplicate "+array[i][j]);
}
if(array[i] ==array[j]){
System.out.println("Duplicate "+array[i][j]);
dup = true;
break;
}
System.out.print(array[i][j] + " ");
}
else System.out.print(" " + " ");
}
System.out.println();
}
}
}
答案 0 :(得分:2)
你有正确的想法来检查是否i == j
,但如果检查你在外面检查是否有重复。如果niz[i] == niz[j]
,您也可以查找。问题是你分别做了这些检查。因此,您使用i==j
支票获取对角线上的所有商品,以及使用niz[i] == n[j]
支票重复的所有商品。
基本上,您需要结合这些检查:if(i==j)
和if(niz[i] == niz[j])
检查它在对角线上的1.和2.是重复的。
尝试使用if检查:if (i==j && niz[i] == niz[j])