Gå til innhold

Anbefalte innlegg

fra boken objects first with java. A practical introduction using bluej.

oppgave er slik:

write a method in your version of the project that plays samples of all tracks by a particular artist, one after the other, The listMatching method illustrates the basic structure you need for this method. Make sure that you chose an artist with more than one file. Use the playAndWait method of the music playerm rather than the startplaying method; otherwise, you will end up playing all the matching tracks at the same time. The playAndWait method plays the beginning of a track (about 15 seconds) and then returns.

 

 

listMatching metoden ser slik ut:

/**
     * kodesnutt som gir en søkefunksjon
     */
    public void listMatching(String searchString){
        boolean match = false;
        for (String filename : files){
            if(filename.contains(searchString)){
                //a match.
                System.out.println(filename);
                match = true;
            }
        }


        // dette skjer dersom ingen match
        if (match == false){
            System.out.println("no match");
        }
    }


Her er mitt forsøk på oppgave
ett av veldig mange forsøk.
det ender uansett opp med at den spiller av den samme sangen 4 ganger.
dette til tross for at jeg har lagt til 4 forskjellige sanger, av samme band.

hva gjør jeg feil her?

public void playSampleOfMySearch(String searchString){
        
        for (String filename : files){
           
            if (filename.contains(searchString)){
              int x = filename.indexOf(filename);
              playAndWait(x);
            }
          
           
           
            
        }
    }

 

Lenke til kommentar
Videoannonse
Annonse

takker for svar, det var ikke if setningn som var feil.
satt og knotet med dette og fikk det endelig til.
Her er min løsning:

/**
     * Spiller av snutter av alle artistens sanger på 15 sekunder.
     */
    public void playSampleOfArtist(String artist){
        
        for (String filename : files){
           
            if (filename.contains(artist)){
              
              int z = files.indexOf(filename);
              playAndWait(z);
            }
          
            else if (!filename.contains(artist)){
            System.out.println("No match");
            }
           
            
        }
    }
Lenke til kommentar

For optimalisering-skyld kan du unngå sjekken (!filename.contains(artist)) da du allerede sjekket om den gjorde det med den første "if". Holder å bare ha "else" rett etterpå.

Om listen hadde vert massiv kunne det ha blitt en liten fartsdump å gjøre sjekken enda en gang.

Lenke til kommentar
takker, fikk ordna det nå.

fant ut at else(){} ikke var riktig måte å skrive det på men


else{

System.out.println("no match")

}


funket bedre.


Metoden min er fortsatt ikke helt feilfri dog, legger jeg til 3 sanger med Pink Floyd og 3 sanger med Queen og kjører playSampleOfArtist(Queen),

vil den spille av de 3 sangene til Queen, men den vil fortsatt printe ut 3 stk "no match"


dette er vell pga av at den alltid går igjennom hele listen "files"

er det noe jeg kan gjøre for og unngå dette? klarer ikke helt og tenke meg frem til dette nå :p

Lenke til kommentar

er det noe jeg kan gjøre for og unngå dette? klarer ikke helt og tenke meg frem til dette nå :p

 

Hva om du legger til en boolean som er satt til false i begynnelsen av metoden, som blir satt til true så straks den har funnet en sang. Også kjører en ekstra if-sjekk etter for-løkka.

/**
     * Spiller av snutter av alle artistens sanger på 15 sekunder.
     */
    public void playSampleOfArtist(String artist){
        boolean foundSong = false;

        for (String filename : files){
            if (filename.contains(artist)){
              foundSong = true;
              int z = files.indexOf(filename);
              playAndWait(z);
            }
        }
        if(foundSong){
            System.out.println("No match");
       }
    }
Lenke til kommentar

Siden den skulle spille av alle sangene til en artist, så kunne du jo i begynnelsen av metoden ha funnet alle indeksene, eller i all fall hvor mange sanger artisten har (psuedo-kode):

/**
* Spiller av snutter av alle artistens sanger på 15 sekunder.
*/
public void playSamplesOfArtist(String artist)
{
    List<int> songIndices = new ArrayList<int>();

    for( String filename : files )
    {
        if( filename.contains(artist) )
            songIndices.add( files.indexOf(filename) );
    {

    if( !songIndices.isEmpty())
    {
        // Spiller av alle sanger av artisten som ble funnet
        for( int index : songIndices )
            playAndWait(index);
    }
    else
    {
        System.out.println("No match");
    }
}

Samtidig kunne du også ha sortert listen over sanger slik at alle artister var samlet individuelt. Da kunne du ha avbrutt sjekken med en gang du ikke finner en match (så slipper du å rase igjennom hele lista).

 

En av mange måter å gjøre det på. (Legg merke til at jeg har gått ut ifra at ting som List<>, ArrayList og dens metoder eksisterer. Jobber ikke særlig med Java, men C# )

Endret av Oyand
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...