【问题标题】:Searching through arraylist?? Java通过arraylist搜索??爪哇
【发布时间】:2013-12-08 05:01:30
【问题描述】:

您好,我的问题中有两个数组列表,一个包含前 1000 个女孩名字和使用次数,另一个填充前 1000 个男孩名字和使用次数。用户输入一个名字,通过数组列表搜索并输出该名字是否在排名靠前的男孩或女孩名字中,他们的排名是什么以及他们被使用了多少次。如果名字在前 1000 个男孩名中,它还需要输出 The name is not part of the top 1000 boy name and if it is a boy name.这就是我所拥有的

  public void search()
  {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Please enter the name you would like to search.");
    nameSearch = keyboard.next();

    for(int i = 0; i < girls.size(); i++)
    {
      if(nameSearch.equals(girls.get(i).getName()))
      {
        System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among girls with " + girls.get(i).getAmount() + " namings.");
      }

    }


    else
      System.out.println(nameSearch + " is not in the top 1000 girl names.");


    for(int i = 0; i < boys.size(); i++)
    {
      if(nameSearch.equals(boys.get(i).getName()))
      {
        System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among boys with " + boys.get(i).getAmount() + " namings.");
      }
    }


    else
      System.out.println(nameSearch + " is not in the top 1000 boys names.");

  }

显然我得到一个错误,因为如果没有 if 之前我不能有 else 语句。只要搜索数组并找到排名以及我只需要它来输出正确的东西,一切都会正常工作。我完全不确定该怎么做才能让它发挥作用。

更新-我尝试了 contains 方法,但我永远无法让它工作。当我知道它是存在的名称时,它总是输出它无法在任一数组中找到名称。如果这看起来不对,请告诉我,因为它无法正常工作

谢谢! --杰斯

   Scanner keyboard = new Scanner(System.in);
    System.out.println("Please enter the name you would like to search.");
    nameSearch = keyboard.next();

    if(girls.contains(nameSearch))
    {
      for(int i = 0; i < girls.size(); i++)
      {
        if(nameSearch.equals(girls.get(i).getName()))
        {
          System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among girls with " + girls.get(i).getAmount() + " namings.");
        }
      }
    } 
    else
      System.out.println(nameSearch + " is not in the top 1000 girl names.");



    if(boys.contains(nameSearch))
    {
      for(int i = 0; i < boys.size(); i++)
      {
        if(nameSearch.equals(boys.get(i).getName()))
        {
          System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among boys with " + boys.get(i).getAmount() + " namings.");
        }
      }
    } else
     {
      System.out.println(nameSearch + " is not in the top 1000 boys names.");
     }

【问题讨论】:

    标签: java if-statement for-loop arraylist


    【解决方案1】:

    你可以检查它是否包含它:

    if(girls.contains(nameSearch)) {
       // Look for the data
    } else {
       // print error
    }
    

    【讨论】:

      【解决方案2】:

      使用boolean 来确定您是否进入该条件,即:

        if(nameSearch.equals(boys.get(i).getName()))
        {
             myBoolean = true;
             //...
        }
      

      然后使用:

       if(!myBoolean)
            System.out.println(nameSearch + " is not in the top 1000 boys names.");
      

      【讨论】:

        【解决方案3】:

        你应该保留一个变量来检查你是否找到了名字...类似于下面。

        nameSearch = keyboard.next();
        
        boolean didFindMatch=false;
        for(int i = 0; i < girls.size(); i++)
        {
          if(nameSearch.equals(girls.get(i).getName()))
          {
            System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among girls with " + girls.get(i).getAmount() + " namings.");
                didFindMatch=true;
                break;
          }
        
        }
        
        
        if (!didFindMatch)
          System.out.println(nameSearch + " is not in the top 1000 girl names.");
        

        【讨论】:

        • 你会在它决定它不在女孩名单中后崩溃。他还想在男孩名单中搜索。
        【解决方案4】:

        要快速搜索您的List,您可以使用Collections.binarySearch(...)。 (见here)。 要使用binarySearch,您的Collection 必须进行排序。用于sort(参见here)的Comparator 必须由binarySearch 使用

        您可以使用 binarySearch 查找指定的name

        【讨论】:

        • 这如何回答这个问题?
        • 这位 OP 显然不太精通 java 的艺术,所以我真的怀疑你通过避免具体的答案帮助了他!
        【解决方案5】:

        不是最干净的,但应该可以很好地工作。

        bolean inboys = false;
        for(int i = 0; i < boys.size(); i++)
        {
          if(nameSearch.equals(boys.get(i).getName()))
          {
            System.out.println(nameSearch + " is ranked " + (i+1) + " in popularity among boys with " +            boys.get(i).getAmount() + " namings.");
        inboys = true;
        
          }
        }
        
        if(inboys == false)
        {
          System.out.println(nameSearch + " is not in the top 1000 boys names.");
        }
        

        【讨论】:

          【解决方案6】:

          我认为你的条件应该是这样的。 . .

          int rank = 0;
          int amount = 0;
          
          for(int i = 0; i < girls.size(); i++)
          {
            if(nameSearch.equals(girls.get(i).getName()))
            {
              rank = i + 1;
              amount = girls.get(i).getAmount();
              break;
            }
          
          }
          if (rank > 0 && amount > 0) {
              System.out.println(nameSearch + " is ranked " + rank + " in popularity among girls with " + amount + " namings.");
          } else {
              for(int i = 0; i < boys.size(); i++) {
                 if(nameSearch.equals(boys.get(i).getName())) {
                     rank = i + 1;
                     amount = boys.get(i).getAmount();
                     break;
                 }
              }
              if (rank > 0 && amount > 0) {
                  System.out.println(nameSearch + " is ranked " + rank + " in popularity among boys with " + amount + " namings.");
              } else {
                  System.out.println(nameSearch + " is not in the top 1000 girl names.");
                  System.out.println(nameSearch + " is not in the top 1000 boys names.");
              }
          }
          

          【讨论】:

            【解决方案7】:

            在我看来,您可以使用 arraylist.indexof 方法来获取索引,然后如果它不是 -1,则使用索引来获取名称出现的次数。 为此,您需要创建某种人员对象,并能够按名称将其与另一个人进行比较。

            Person p = new Person(namesearch);
            int index = (girls.indexOf(p);
            if(index != -1) {
               // Print info
            } else {
               // print error
            }
            

            【讨论】:

              【解决方案8】:

              contains() 方法是你能做的最好的。

              正如 Jeroen Vannevel 所说,

              先在女孩数组列表中搜索名字,然后在男孩数组列表中搜索:

              if(girls.contains(nameSearch))
              {
                  //print your result
              } else if(boys.contains(nameSearch))
              {
                 //print your result
              } else
              {
                 //print not found.
              }
              

              您不必遍历整个数组列表。

              Java 有两种包含方法

              1 - boolean java.lang.String.contains(CharSequence s)

              2 - public boolean contains(Object o)

              在您的情况下,它是一个 String 对象,请选择第二种 contains() 类型,如果找到 String,则返回 true。你可以得到你想要的。

              【讨论】:

                猜你喜欢
                • 2015-01-26
                • 2021-03-11
                • 2015-06-07
                • 1970-01-01
                • 1970-01-01
                • 2015-04-16
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多