2014-10-18 3 views
0

Итак, у меня есть класс, который создает объект Song, содержащий название: Исполнитель: 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; 
    } 
} 

ответ

0

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

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

Спасибо, кучка. Я так долго смотрел на свой код, что перешел эту простую концепцию. Выход был таким, как предполагалось. Еще раз спасибо. –

+0

приветствуются – Anand

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