我有一个包含10行和4列的String数组,用于保存联系信息。如果用户想删除一个联系人,但保留10行和4列 - 不以任何方式使用列表 - 这是如何完成的?例如:
contacts[0][0] = fName; //Charlie
contacts[0][1] = lName; //Brown
contacts[0][2] = pNum; //(309)555-1212
contacts[0][3] = age1; //10
contacts[1][0] = fName1; //Sally
contacts[1][1] = lName; //Brown
contacts[1][2] = pNum; //(309)555-1212
contacts[1][3] = age3; //8
现在,用户想要从联系人中删除Charlie Brown,并移动所有其他行以填充空白区域,共保留10行和4列。
最新的尝试是:
private void removeContact(String[][] contacts)
{
Scanner input = new Scanner(System.in);
String lName;
String fName;
int fIndex;
int lIndex;
System.out.println("What is the first name of the contact to remove?");
fName = input.nextLine();
System.out.println("What is the last name of the contact to remove?");
lName = input.nextLine();
boolean found = false;
for (int i = 0; i < contacts.length; i++)
{
for (int j = 0; j < 4; j++)
{
if (contacts[i][0].equalsIgnoreCase(fName) && contacts[i][1].equalsIgnoreCase(lName))
{
found = true;
break;
}
else
{
System.out.println("That contact was not found.");
return;
}
}
if (found)
{
contacts[i][0] = null;
contacts[i][1] = null;
contacts[i][2] = null;
contacts[i][3] = null;
return;
}
}
}
如果您只想删除Charlie Brown,但是对于任何其他行......它不起作用
答案 0 :(得分:0)
如果要使用数组,则必须编写for循环代码以移动元素。
实现这一目标:
int ind; //the index you'd like to remove.
for(int i = ind + 1; i < array.length; i++){
array[i - 1] = array[i];
}
//set last value to nulls or something.
考虑一个ArrayList:https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html它会为你完成所有的转移。
此外,您可能希望生成People
个对象,并使您的数组(或ArrayList)成为People
之一。这样,您就不必使用任意数字跟踪联系人的属性,并且可以使用更易读和可重复使用的代码。
答案 1 :(得分:0)
您可以移动所有行并替换最后一行。
System.arrayCopy(contacts, 1, contacts, 0, contacts.length-1);
Arrays.fill(contacts[contacts.length-1] = new String[4], "");
答案 2 :(得分:0)
如果这里的顺序无关紧要,那么只要将数组中的最后一个元素复制到被删除的位置并将size变量减一(我假设您保留了地址簿的数量),效率会更高变量中数组中的条目。)