2013-11-11 2 views
0

Я делаю проект для класса, в котором вы должны сделать Зал славы и иметь возможность добавлять/удалять/искать/редактировать разные группы. Прямо сейчас у меня возникают проблемы с поиском индекса для определенной группы, потому что он всегда возвращает -1, и я не уверен, почему.Arraylist indexOf всегда возвращает -1 Java

Вот мой код:

public class HallofFame 
{ 
    public static ArrayList<Band> hallOfFame = new ArrayList<Band>(); 
    public static Scanner scan = new Scanner(System.in); 
    public static void main(String[]args){ 
     int a = 0; 
     while(a == 0){ 
      System.out.println("What would you like to do?"); 
      System.out.println(""); 
      System.out.println("1. Add"); 
      System.out.println("2. Remove"); 
      System.out.println("3. Edit"); 
      System.out.println("4. Clear"); 
      System.out.println("5. Search"); 
      System.out.println("6. Quit"); 
      System.out.println(""); 
      String choice = scan.nextLine(); 
      if(choice.equals ("1")){ 
       add(); 
      } 
      else if(choice.equals ("2")){ 
       remove(); 
      } 
      else if(choice.equals ("3")){ 
       edit(); 
      } 
      else if(choice.equals ("4")){ 
       clear(); 
      } 
      else if(choice.equals ("5")){ 
       search(); 
      } 
      else if(choice.equals ("6")){ 
       quit(); 
       break; 
      } 
     } 
    } 

    public static void add(){ 
     Scanner booblean = new Scanner(System.in); 
     System.out.println("What is the name of the band you would like to add?"); 
     String name = scan.nextLine(); 
     System.out.println("What kind of genre is this band?"); 
     String genre = scan.nextLine(); 
     System.out.println("How many members are in the band?"); 
     int numMem = scan.nextInt(); 
     System.out.println("How many songs does this band have?"); 
     int numSongs = scan.nextInt(); 
     System.out.println("How many albums does this band have?"); 
     int numAlbs = scan.nextInt(); 
     System.out.println("Is this band currently active?"); 
     String yesno = booblean.nextLine(); 
     boolean isActive = false; 
     if(yesno.equalsIgnoreCase ("yes")){ 
      isActive = true; 
     } 
     Band b1 = new Band(name, genre, numMem, numSongs, numAlbs, isActive); 
     hallOfFame.add(b1); 
     System.out.println(""); 
     System.out.println("The band " + name + " has been added to the database."); 
     System.out.println(""); 
    } 

    public static void remove(){ 

    } 

    public static void edit(){ 
     System.out.println("What band info do you want to edit?"); 
     String searchband = scan.nextLine(); 
    } 

    public static void clear(){ 
     hallOfFame.clear(); 
    } 

    public static void search(){ 
     System.out.println("What band name are you searching for?"); 
     String searchband = scan.nextLine(); 
     int retval = hallOfFame.indexOf(searchband); 
     System.out.println("The band " + searchband + " is at index: " + retval); 
    } 

    public static void quit(){ 
     System.exit(0); 
    } 
} 

Метод поиска является один у меня возникают проблемы с.

+5

Пожалуйста, покажите, как вы заполняли 'hallOfFame' и пример ввода ввода, который возвращает' -1'. – rgettman

+0

Можете ли вы показать нам весь класс, пожалуйста, а не только этот метод? –

+0

'booblean' - серьезно? : D – Izmaki

ответ

3

Проблема в том, что hallOfFame содержит Band объектов, но вы ищете hallOfFame для String. Вместо этого перейдите через hallOfFame и сравните имена групп с введенной строкой.

2

В качестве альтернативы вы можете переопределить метод equalsBand так, чтобы indexOf действительно работал.

Я бы себе представить, что бы читать что-то вроде этого:

@Override 

public boolean equals(Object o) { 

    return ((Band) o).name==this.name; 

} 
+0

Я бы предложил вместо этого вернуть следующее: return o instanceof Band && ((Band) o) .name == this.name; – JBarberU

1

Один из способов вам нужно сделать конструктор Полосы с парами этим имя. Затем вы можете выполнить поиск объекта «Band» в ArrayList hallOfFame

Смежные вопросы