Если состояние переделать, игнорировать разъяснения

Итак, у меня есть класс, который создает объект Song, содержащий название: Artist: Album. Я предлагаю пользователю запросить конкретного исполнителя, и из ArrayList, содержащего основной список воспроизведения, программа возвращает список, отсортированный по названию, для каждого конкретного исполнителя. Это не было проблемой. У меня проблема в том, что пользователь спрашивает артиста, которого нет в основном списке воспроизведения. Когда я кодирую это, используя if/then/else, я получаю один Sysout для каждого случая, когда запрашиваемый исполнитель не соответствует исполнителю в основном списке воспроизведения. Кроме того, когда пользователь вводит правильного исполнителя, генерируется правильный отформатированный Arraylist вместе с Sysout для каждого исполнителя, который не совпадает с запрашиваемым именем (таким образом, весь основной список по существу). Мне нужно, чтобы ЛИБО возвращался отформатированный ArrayList, содержащий только запрос исполнителя, или одно утверждение, например, "Исполнитель не найден в списке". Я застрял на пару часов, и мне нужна пара свежих мыслей об этом, если хотите. Я знаю, почему это происходит, я просто не могу сориентироваться в моем предполагаемом результате. Кроме того, небольшая помощь в понимании того, почему ignoreCase() не работает для меня (для проверки searchArtist по переменной экземпляра объекта Song), может быть очень полезной.

Ниже приведен текущий код:

import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.*;


public class SongList {


  public static void main(String[] args){


  //An arraylist theList to accept a file containg title : artist : album
    ArrayList<Song> theList = new ArrayList<Song>();


  try{
    Scanner in = new Scanner(System.in);
    File inputFile;
   // Prompts user for proper input
      do{ System.out.println("Please enter a valid input file.");
          String input = in.next();
          inputFile = new File(input);
     }while(!inputFile.exists());


    Scanner inp = new Scanner(new FileReader(inputFile));

   String line = ""; 
   //Accepts a line that is greater in length that 2 (it assumes a colon, and one blank space)
   while((inp.hasNextLine()))
   {
     line = inp.nextLine();
     line = line.trim();
     if(line.length() > 2){
       Song n = createSong(line);
       theList.add(n);
     }
   }
  }

   catch(Exception e){
     System.out.println("Error with the input file: " + e.getMessage());
   }

   Collections.sort(theList); //Sorts by title

   //An arrayList particularArtist that creates an arrayList of a specified artist as given by the     user
   ArrayList<Song> particularArtist = new ArrayList<Song>(); 
   Scanner sa = new Scanner(System.in);
   String searchArtist = "";

   System.out.print("Please enter the name of an artist you'd like to find.");
   searchArtist = sa.next();
//This is where I am having the issue.
    for(Song theArtist : theList)
      if(theArtist.getArtist().contains(searchArtist))
    {
      particularArtist.add(theArtist);
    }
    else{System.out.println("The artist you are looking for does not exist in the play list.");}

    for(Song is : particularArtist)
    System.out.println(is);


  }
   /*
    * Method for creating a Song object given an input file. In the format "Title : Artist: Album,"     substrings
    * are created at the colons, and white space is trimmed.
    */

   public static Song createSong(String a) {
    int index1 = a.indexOf(':');
    int index2 = a.indexOf(':', index1 + 1);
    Song s = new Song(a.substring(0, index1).trim(), a.substring(index1 + 1, index2).trim(),     a.substring(index2 + 1).trim());
    return s;
   }
}

1 ответ

Решение: если совпадение существует, то добавьте его в список результатов (specificArtist). Если список результатов пуст, то художник печати не существует.

for(Song theArtist : theList) {    
  if(theArtist.getArtist().contains(searchArtist)) {  
      particularArtist.add(theArtist);  
  }
}  

for(Song is : particularArtist) {
  System.out.println(is);
}

if (particularArtist.size() == 0) {
  System.out.println("The artist you are looking for does not exist in the play list.")
}
Другие вопросы по тегам