superFrosk Skrevet 27. juli 2014 Del Skrevet 27. juli 2014 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å oppgaveett 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
geir__hk Skrevet 27. juli 2014 Del Skrevet 27. juli 2014 Nå er det veeldig lenge siden jeg drev på med Java, men jeg tror at setninga if(filename.contains(searchString)) mangler ett eller annet for å identifisere det enkelte / gjeldende objektet, altså at du ikke bare henter rett fra samlingsobjektet som det ser ut som. Lenke til kommentar
superFrosk Skrevet 28. juli 2014 Forfatter Del Skrevet 28. juli 2014 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
Oyand Skrevet 28. juli 2014 Del Skrevet 28. juli 2014 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
superFrosk Skrevet 28. juli 2014 Forfatter Del Skrevet 28. juli 2014 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å Lenke til kommentar
superFrosk Skrevet 28. juli 2014 Forfatter Del Skrevet 28. juli 2014 Eller er dette bare rett og slett en av svakhetene til for each loops? Lenke til kommentar
Persn Skrevet 28. juli 2014 Del Skrevet 28. juli 2014 er det noe jeg kan gjøre for og unngå dette? klarer ikke helt og tenke meg frem til dette nå 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
Oyand Skrevet 28. juli 2014 Del Skrevet 28. juli 2014 (endret) 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 28. juli 2014 av Oyand Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå