【问题标题】:Java - How to get the index of a given element in an arrayJava - 如何获取数组中给定元素的索引
【发布时间】:2014-07-31 19:36:07
【问题描述】:

我有一个这样的联系人数组:

public class Application {

private Scanner input;
private Contact[] contacts;
private int ArrayNum;

public Application() {
    input = new Scanner(System.in);
    contacts = new Contact[5];
    ArrayNum = 0;

}

我想做的是在联系人列表中输入某人的姓名,如果在他们的列表中找到他们,则返回他们的索引,如下所示:

System.out.println("Who do you want to remove?");

            String name = input.nextLine();

            for(Contact c: contacts){
                if(c.getName().equals(name)){

                    //Get the index here
                }
            }

我尝试对此进行研究,但似乎没有答案或指南对此非常清楚,所以我希望有人可以为我解释一下。

感谢您的关注

【问题讨论】:

  • 使用一个使用计数器的 for 循环。
  • 你知道除了enhanced-for-loop for (Element el : elements)还有简单的for循环for(int i=0; i<elements.lenght; i++)吗?考虑使用第二个。
  • 使用具有indexOf()List

标签: java arrays indexing


【解决方案1】:
for(int index = 0; index < contacts.length; index++) {
    if(contacts[index].getName().equals(name)) {
        // use the index here
    }
}

我认为这段代码 sn-p 不需要任何进一步的解释。

【讨论】:

    【解决方案2】:

    使用一个使用计数器的 for 循环。

    for(int i = 0; i < contacts.length, i++) {
        if(contacts[i].getName().equals(name)) {
            // do something with the index, i
        }
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用计数器

      System.out.println("你要删除谁?");

              String name = input.nextLine();
              int remove_index = -1;
              for(int i=0; i<contacts.length; i++){
                  Contact c = contacts[i];
                  if(c.getName().equals(name)){
                      remove_index =i;
                  }
              }
      

      【讨论】:

        【解决方案4】:

        另一个可能有用的替代方法是使用ArrayList&lt;Contact&gt; 而不是 c 样式数组 (Contact[])。这个类可能会增加更多的处理复杂性,但它包含许多有用的额外方法,包括int indexOf(&lt;T&gt; object),其中&lt;T&gt; 是您在声明中指定的类型(即Contact 用于ArrayList&lt;Contact&gt; contacts)。

        【讨论】:

          【解决方案5】:

          坏主意!如果你有一个数组,你不能认真地这样做。当然,您可以将索引设置为空,但是您必须搜索空条目以引用数组中的新联系人。 注意:您在编写时有一个迭代器

          for(Contact c: contacts){...
          

          所以一种选择是按索引进行迭代,但这是一个糟糕的选择。更好地使您的阵列成为一个集合。然后你可以写:

          for (Iterator<Contact> iter = mySet.iterator();iter.hasNext();) {
              final Contact next = iter.next();
              if(next.getName() == "NAME") {
                   iter.remove();
                   break;
              }
          

          始终使用 Iterator.remove()!否则你会比你希望的更早得到例外:D

          【讨论】:

          • 我没有看到 OP 在哪里说过关于从数组中删除项目的任何内容...... OP 想要获取项目的索引。所以这真的没有回答问题中的任何问题。
          猜你喜欢
          • 2016-01-11
          • 1970-01-01
          • 1970-01-01
          • 2019-06-23
          • 2021-04-21
          • 1970-01-01
          • 2019-05-17
          • 2021-08-15
          • 2022-01-12
          相关资源
          最近更新 更多