簡體   English   中英

通過arraylist搜索? 爪哇

[英]Searching through arraylist?? Java

您好,所以我的問題中有兩個數組列表,一個用前1000個女孩名字和使用次數填充,另一個用前1000個男孩名字和使用次數填充。 用戶輸入一個名稱,搜索兩個數組列表,並輸出該名稱是否在男孩或女孩的頭名中,它們的排名是多少以及使用了多少次。 如果名稱在前幾名女孩中,則還需要輸出該名稱不是前1000名男孩名的一部分,如果是男孩名,則該名稱相同。 這就是我所擁有的

  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.");
     }

您可以檢查其中是否包含:

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

使用boolean確定是否進入條件,即:

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

然后使用:

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

您應該保留一個變量以檢查是否找到了名稱...類似於下面的內容。

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.");

在我看來,您可以使用arraylist.indexof方法獲取索引,然后如果它不是-1,則使用索引獲取名稱出現的次數。 為此,您需要創建某種人對象,並能夠通過名稱將其與另一個人對象進行比較。

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

要快速搜索List ,可以使用Collections.binarySearch(...) (請參閱此處 )。 要使用binarySearch必須對您的Collection進行排序。 binarySearch必須使用用於sort的相同Comparator (請參閱此處 )。

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

不是最干凈的,但應該能很好地工作。

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.");
}

我認為您的情況應該像這樣。

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.");
    }
}

contains()方法是您所能做的最好的事情。

正如Jeroen Vannevel所說,

首先在girls arraylist中搜索名稱,然后在boys arraylist中搜索,例如:

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

您不必遍歷整個arraylist。

Java有兩種類型的包含方法

1-布爾java.lang.String.contains(CharSequence s)

2-公共布爾包含(對象o)

在您的情況下,它是一個String對象,請選擇contains()的第二種類型,如果找到該String,它將返回true。 您可以得到想要的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM