现有一个这样的方法:
private static String[] a = { "a", "b", "c", };
// 申明一个二维数组(測試時使用)
private static String[][] b = { { "a", "b", "c" }, { "b", "b", "b" },
{ "c", "b", "c" } };
public ArrayList leftUnioele(String[] a, String[][] b) {
ArrayList mylist = new ArrayList ();
int[] mynum = new int[2];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
if (!(b[i][j] == a[j])) {// 判断a【j】是否与其对应的一列上的数值相等
mynum[0] = i;
mynum[1] = j;
mylist.add(mynum);
for (int[] out : mylist) {
System.out.println(out[0] + " " + out[1]);
}
}
}
}
return mylist;
}
测试后发现输出了重复的元素!
请问要删除这些重复的元素,用remove()方法怎么实现?或者用其他什么更好的方法能删除mylist对象中重复的元素!
经测试, 发现是你程序本身问题:
1.你new出的mynum对象引用存在于for循环外,既,整个循环过程中你仅仅只有一个对象引用, 当然输出的是重复值;
2.你的输出位置也有问题,应该放在循环外进行
更改后代码如下:
[code="java"]
public class Main {
private static String[] a = { "a", "b", "c", };
// 申明一个二维数组(測試時使用)
private static String[][] b = { { "a", "b", "c" }, { "b", "b", "b" },
{ "c", "b", "c" } };
public ArrayList<int[]> leftUnioele(String[] a, String[][] b) {
ArrayList<int[]> mylist = new ArrayList<int[]>();
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a.length; j++) {
if (!(b[i][j] == a[j])) {// 判断a【j】是否与其对应的一列上的数值相等
int[] mynum = new int[2];
mynum[0] = i;
//System.out.print(mynum[0]);
mynum[1] = j;
//System.out.println(mynum[1]);
mylist.add(mynum);
}
}
}
for (int k = 0; k < mylist.size(); k++) {
System.out.println(mylist.get(k)[0] + " " + mylist.get(k)[1]);
}
return mylist;
}
public static void main(String[] args) {
Main main = new Main();
List<int[]> list = main.leftUnioele(a, b);
}
}
[/code]
[code="java"]private static String[] a = { "a", "b", "c", }; [/code]
看,zhoujj303030,你的这段代码中,"c"后面是不是多了一个,号呢?
虽然是多了, 但是却不影响程序执行, 你可以自己COPY回去看
wxjiaaa回答的很好,因为int[] mynum = new int[2]; 是对对象的引用,引用的是对象的地址,而你在第二次,第三次循环的时候,把对象的内容给改变了,所以,前面的对象都和最后的对象一样了,所以才重复。