通过折叠所有元素来删除2D数组中的元素

时间:2016-06-21 23:10:17

标签: java arrays multidimensional-array

我正在制作一个跟踪员工信息的程序。我有一个包含记录的二维数组([employee] [piece_of_data]),我希望能够通过循环遍历数组并使当前记录等于下一个记录来删除记录。

现在它正在删除所选择的记录AHEAD而不是当前记录,似乎无论我如何操纵它,它都不会删除正确的记录。

这是我的代码:

//Delete current record, collapse records into it
    for (int iLoop = iEmployee; iLoop < iEmployeeCount; iLoop++){
        for (int iLoop2 = 0; iLoop2 <= 20; iLoop2++){
            sData[iLoop][iLoop2] = sData[iLoop + 1][iLoop2];
        }
    }

2 个答案:

答案 0 :(得分:2)

我建议您不要使用这个奇怪的双数组,而是以正确的方式解决这个问题。当前的代码很乱,不可维护。更糟糕的是,似乎它可能会复制记录,因为在您离开移位后,2D数组中的所有列最后一列将包含第二列的副本。

Java是一种面向对象的语言。使用对象。

//declare a class to store the info about one employee
//this will replace one column in your double array
public class Employee {
 //each one of these fields corresponds to one cell in your double array
 public string data1; 
 public string data2;
 public string data3;
}

然后将它们存储在链接列表中:

//this is just an example of how you would add employees to a list instead of an array
LinkedList<Employee> employees = new LinkedList<>(); //make a linked list
Employee toAdd = new Employee();                     //make an employee
toAdd.data1 = "example";                             //set up his data
toAdd.data2 = "setting";
toAdd.data3 = "fields";
employees.add(toAdd);                                //add him to the list

然后要删除员工,而不是使用数组执行这种复杂且无效的方法,只需获得所需员工的链接并致电

employees.remove(iEmployee);

其中iEmployee是要删除的员工列表中的数字。

答案 1 :(得分:0)

因为您无法将矩阵转换为Objects并且无法使用ArrayList来完成整个过程,所以这是一种方法:

ArrayList<String[]> a=new ArrayList(Arrays.asList(sData));
a.remove(iEmployee);

这会将矩阵转换为String数组的ArrayList。

Object[] oa = a.toArray();
for(int i = 0; i<oa.length; i++){
    sData[i] = (String[])oa[i];
}

然后将ArrayList转换回sData矩阵。

编辑:如果除了在其他地方设置矩阵大小之外,这将不起作用。删除数据后,这将调整矩阵的大小。