0

我的程序要求能够从电话簿中删除姓名和号码。我已经让删除工作,但它只从文本框对应的 ArrayList 中删除索引。我需要能够通过将名称和数字输入到任一 texbox 中来从它们各自的数组列表中删除名称和数字。抱歉,如果对此有其他答案,我想我真的不知道如何正确表达。我的代码如下。

ArrayList<String> Names = new ArrayList<String>();
ArrayList<String> Numbers = new ArrayList<String>();

if(e.getSource() == DeleteBtn)
{


if (NameTxt.getText() != null)
{
for( int i=0; i<= NamesList.size(); i++)
{
if(NamesList.contains(NameTxt.getText()))
{
NamesList.remove(i);
System.out.println(NamesList.size());

}                                                    
}
}

if (PhoneTxt.getText() != null)
{
for( int i=0; i<= NumbersList.size(); i++)
{
if(NumbersList.contains(PhoneTxt.getText()))
{
NumbersList.remove(i);
System.out.println(NumbersList.size());

}                                                    
}
}
}
4

6 回答 6

2

如果您必须使用 ArrayLists,那么您可以考虑使用 ArrayList 对。您可以创建自己的类,例如 PhoneBookEntry。

class PhoneBookEntry {
    String _name;
    String _phone;
    // etc...
}

ArrayList<PhoneBookEntry>
于 2015-03-03T17:55:24.887 回答
1

考虑使用 HashMap 而不是 ArrayLists。

HashMap<String, String> numbersAndNames = new HashMap<String, String>();
numbersAndNames.put("John", "123 456 789");
于 2015-03-03T17:42:56.353 回答
0

根据使用附加类来跟踪名称/号码组合的建议。

ArrayList 联系人 = new ArrayList();

if(e.getSource() == DeleteBtn) {

   if (NameTxt.getText() != null) {
      for( int i=0; i<= contacts.size(); i++) {
         if(contacts.getName().contains(NameTxt.getText())) {
           contacts.remove(i);
           System.out.println(contacts.size());

      }                                                    
   }
}

public class PhoneContact {
   private String name;
   private String number;
   /*
      Getters and Setters
   */
 }
于 2015-03-03T17:58:40.173 回答
0

如果我是你,我会重新考虑我的逻辑。我将尝试避免为您发布代码,以免给您答案/为您完成工作,但是...

  1. 我只看到您修改 NamesList 变量。您没有修改 Names 或 Numbers ArrayList 变量。

  2. 我会将您的“包含 if 语句”放在其他地方。您检查 NameList 是否包含 NameText 很多次。我不明白您为什么需要多次检查它。

  3. 如果你想变得聪明,你可以完全取消数组,只使用 getIndex() 方法在java中产生某种效果......它获取与 NameText 对应的索引(我这里故意含糊不清,所以想想我在说什么)。

  4. 如果需要,您可以使用 HashMap,但这不是必需的。

于 2015-03-03T17:54:29.407 回答
0

首先,如果是列表中的任何位置NumbersList.contains(PhoneTxt.getText()),则返回。PhoneTxt.getText()

您要检查的是NumbersList.get(i).equals(PhoneTxt.getText()) 我使用的注释equals()而不是==运算符

于 2015-03-03T18:06:08.593 回答
0

我的朋友实际上找到了答案,他只是添加了另一个 ArrayList(i),感谢所有发布答案的人,因为他们让我深思熟虑,只是认为答案的逻辑行不通,但事实证明我错了,在这里是任何有兴趣的人的代码。

if(e.getSource() == DeleteBtn)
{


if (NameTxt.getText() != null)
{
for( int i=0; i<= NamesList.size(); i++)
{
if(NamesList.contains(NameTxt.getText()))
{
NamesList.remove(i);
NamesList.remove(i);

System.out.println(NamesList.size());
System.out.println(NumbersList.size());

}                                                    
}
}

if (PhoneTxt.getText() != null)
{
for( int i=0; i<= NumbersList.size(); i++)
{
if(NumbersList.contains(PhoneTxt.getText()))
{
NumbersList.remove(i);
NamesList.remove(i);

System.out.println(NamesList.size());
System.out.println(NumbersList.size());

}                                                    
}
}
}
于 2015-03-03T18:14:13.813 回答