2016-06-21 45 views
1

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

现在它正在删除所选的记录而不是当前的记录,看来不管我如何操作它,它都不会删除正确的记录。

这里是我的代码:

//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]; 
     } 
    } 
+0

你试过sData [iLoop-1] [iLoop2] = sData [iLoop] [iLoop2];'? – Ian

+0

是的,但无论我如何改变它,即sData [iLoop - 2] [iLoop2] = sData [iLoop - 1] [iLoop2];它仍然会删除当前的记录,最终它会给出一个超出界限例外。我很困惑,这是一段简单的代码。 –

+0

它是否必须是固定数组?或者你能够使用ArrayList或其他集合?有没有理由不能创建一个对象类? – Ian

回答

2

我建议,而不是用这种怪异的双阵列工作,你以正确的方式解决这个问题。目前的代码很混乱,不可维护。更糟糕的是,它似乎可能会复制记录,因为在左移二维数组中的所有列后,最后一列将包含最后一列的副本。

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 

然后删除雇员,而不是做与数组这个复杂和inefficent方法,只得到一个链接到你想要的员工,致电

employees.remove(iEmployee); 

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

+0

谢谢,这里真的很有帮助,我想一定会在这之前再提到这里。这是我高中最后的表演任务,我早已经过了不归路。如果我重新开始,我会做很多不同的事情(包括这些),但我已经接近尾声,我的程序中的所有内容都围绕着这个特定的数组。只是解决这个问题是我现在需要的。 –

0

因为你无法将矩阵转换为对象和无法使用ArrayList在这里,整个事情是一个办法做到这一点:

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

这将矩阵转换为字符串的ArrayList阵列。

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

然后这会将ArrayList转换回sData矩阵。

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