r2d290 Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 Hallo Har fått følgende oppgave: Lag en ordbok Når brukeren skriver inn en setning, skal programmet lagre de individuelle ordene som en PriorityQueue. Når ti ord er lagret i køen skal ordene bli skrevet ut alfabetisk. Hvordan løses denne oppgaven best? Skal jeg kunne skrive inn en setning på f.eks. 25 ord, og når jeg trykker på enter så skal den sortere de 10 første ordene for seg, så de ti neste ordene, for så å vente på at det kommer 5 nye ord? Eller kan jeg gå ut ifra at jeg kan lage en setning på nøyaktig 10 ord, for så å trykke enter? Det jeg har fått til til nå er å skrive inn 10 individuelle ord, der jeg trykker på enter mellom hvert ord. Hva bør jeg få til videre? Hva kan evt. forbedres? Takk for svar import java.util.Scanner; import java.util.PriorityQueue; public class FirstClass { public static void main( String[] args ) { System.out.println( "****Create a dictionary****" ); //Queue of capacity 10 PriorityQueue< String > queue = new PriorityQueue< String >(); // insert elements to Queue System.out.print( "Please insert a sentence of ten words. Seperate each word with enter:"); for(int i = 0; i<10; i++) { Scanner sentence = new Scanner( System.in ); String sentenceText = sentence.nextLine(); queue.offer( sentenceText ); } System.out.print( "Polling from queue: " ); // Display elements in queue while ( queue.size() > 0 ) { System.out.printf( "%s ", queue.peek() ); //view top element queue.poll(); // remove top element } // end while } // end main } // end class FirstClass Lenke til kommentar
SkoMedHull Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 (endret) Jeg leste litt for lite i posten din. Det ser jo ut til at du har gjort alt de ber om? Mvh Håkon Endret 6. februar 2013 av SkoMedHull Lenke til kommentar
r2d290 Skrevet 6. februar 2013 Forfatter Del Skrevet 6. februar 2013 (endret) Jeg er bare ikke helt tilfreds med å klikke "Enter" for hvert ord, når oppgaven ber meg om å skrive inn en setning. Edit: og heller ikke det at setningen jeg skriver inn må være på nøyaktig 10 ord. Eller virker det greit? Endret 6. februar 2013 av r2d290 waits for Obi-Wan Lenke til kommentar
SkoMedHull Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 Du ønsker at man f.eks skal kunne skrive inn en setning på 24 ord, trykke enter, og så skrives det ut 2 sorterte lister av 10 ord? Lenke til kommentar
r2d290 Skrevet 6. februar 2013 Forfatter Del Skrevet 6. februar 2013 Jeg ønsker å besvare oppgaven på den måten det er mest trolig at den er ment å bli besvart på Problemet er at jeg usikker på hvordan oppgaven mest trolig er ment å bli besvart. Lenke til kommentar
SkoMedHull Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 Du kan naturlig nok bruke String.split(" ") for å ta én linje og splitte den opp i enkeltord. Deretter kan du flytte alle disse ordene over i køen én etter én. Mellom hvert element som blir lagt til så sjekker du om du har 10 elementer, hvis du har det så skriver du ut alle ordene fra køen. Lenke til kommentar
r2d290 Skrevet 6. februar 2013 Forfatter Del Skrevet 6. februar 2013 Takk Skal se hva jeg får til. Lenke til kommentar
etse Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 Om det er skoleoppgave skal dere nok levere noe dokumentasjon sammen med koden? Skriv i så fall innledningsvis alle antagelser dere gjør der. Da er det lett for de som ser over koden å vite hvorfor dere har gjort noe, om det ikke helt hva det han hadde tenkt. Og om antagelsene dine er fair, så burde det ikke gi noe trekk selv om det var litt feil måte. Han vil selv forstå at oppgaveteksten var litt uklar. Da kan du skrive noe som "Oppgave teksten var noe uklar, men slik vi tolket den skulle brukeren skrive inn hele setninger inn i programmet på en linje. Dette gjør at vi selv må dele setningen opp i ulike ord..." Vil og anbefale at dere fjerner eventuelle spesialtegn siden det skal være ord om det vil være fint. Altså ting som komma, punktum og utropstegn. Da det er naturlig å forvente at setninger avsluttes med dette. Lenke til kommentar
SkoMedHull Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 Jeg laget et utkast til hvordan jeg ville løst det. Det jeg dog ikke har gjort er å fjerne spesialtegn, og det finnes ikke noen god måte å avslutte programmet. Her ser du i alle fall hvordan det går an å gjøre det med tanke på å legge til elementer i køen og printe ut når det er 10 elementer. http://pastebin.com/R4dhitKa Mvh Håkon. Lenke til kommentar
r2d290 Skrevet 6. februar 2013 Forfatter Del Skrevet 6. februar 2013 Tusen takk begge to! Nå har jeg litt å gå etter Lenke til kommentar
r2d290 Skrevet 6. februar 2013 Forfatter Del Skrevet 6. februar 2013 Jeg laget et utkast til hvordan jeg ville løst det. Det jeg dog ikke har gjort er å fjerne spesialtegn, og det finnes ikke noen god måte å avslutte programmet. Her ser du i alle fall hvordan det går an å gjøre det med tanke på å legge til elementer i køen og printe ut når det er 10 elementer. http://pastebin.com/R4dhitKa Mvh Håkon. Bare påpeke en mulig liten feil i koden din, i tilfelle andre tar denne ibruk: for(String word : words) { if(queue.size()>=10) printTenElements(); queue.offer(word); } Her bør vel queue.offer(word) komme før if-setningen? Hvis ikke, printer den ikke ut de ti elementene før det har blitt skrevet inn elleve elementer. Lenke til kommentar
SkoMedHull Skrevet 7. februar 2013 Del Skrevet 7. februar 2013 Hehe, her har det gått litt fort i svingene ja. Lenke til kommentar
r2d290 Skrevet 7. februar 2013 Forfatter Del Skrevet 7. februar 2013 Lurer på en liten ting til. Koden i boka mi: Java how to program, eight edition, Paul Deitel & Harvey Deitel, side 867: import java.util.PriorityQueue; public class PriorityQueueTest { public static void main( String[] args ) { //queue of capacity 11 PriorityQueue< Double > queue = new PriorityQueue< Double>(); //insert elements to queue queue.offer(3.2); queue.offer(9.8); queue.offer( 5.4); System.out.print( "Polling from queue: " ); // display elements in jueue while ( queue.size() > 0 ) { System.out.printf( "%.1f", queue.peek() ); queue.poll(); //remove top element } } } Jeg skjønner ikke hvorfor de skriver kommentaren "Queue of capacity 11". Hvor får de 11 fra? I teksten står det: "Line 10 creates a priorityqueue that stores Doubles with an initial capacity of 11 elements and orders the elements..." Lenke til kommentar
Persn Skrevet 7. februar 2013 Del Skrevet 7. februar 2013 Jeg skjønner ikke hvorfor de skriver kommentaren "Queue of capacity 11". Hvor får de 11 fra? I teksten står det: "Line 10 creates a priorityqueue that stores Doubles with an initial capacity of 11 elements and orders the elements..." Betyr vel akkurat det som står der, klassen PriorityQueue er hardkodet til å ha en kapasitet på 11 om du ikke har angitt noe annet i konstruktør. ALLTID LES API OM NOE SKURRER PÅ EN KLASSE DU IKKE HAR PROGRAMMERT SELV. http://docs.oracle.c...PriorityQueue() Jeg regner med at de har gått for tallet 11 fordi det var ett like bra tall som noe annet. Les dette, virket som en rimelig grei forklaring på hvordan PriorityQueue er lagt opp http://www.cs.cmu.ed.../15-priorqs.pdf For å forklare i korte trekk så er PriorityQueue en Heap med 11 noder ferdig lagt opp som du kan sette inn tall i, setter du inn mer en 11 tall så må du belaste CPU med flere operasjoner for å lage splitter nye heaps hvor alle tallene blir satt inn helt på nytt i for hvert tall du legger inn. 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å