kyrsjo Skrevet 12. desember 2005 Del Skrevet 12. desember 2005 (endret) Har en funksjon som ser så her ut: /**Reads an int from the keyboard. Does not give up before it has got a valid integer. * * @return An integer that is read from the keyboard */ public static int readIntFromKeyboard () { Scanner keyboard = new Scanner(System.in); int readInt = -1; boolean ready; do { ready = true; try { readInt = keyboard.nextInt(); } catch (InputMismatchException foo) { System.out.println("Please enter a numeral"); ready = false; } finally { } } while (!ready); return readInt; } Hva den gjør burde være selvforklarende, men det er ett problem - hvis brukeren ikke taster inn ett tall, så skjer dette (evig løkke): *** DEBUG MENU *** 1. Generate and print a random deck 101. Exit debugmenu (continue normal program execution) 102. Exit debugmenu (exit program) r Please enter a numeral Please enter a numeral Please enter a numeral Please enter a numeral Please enter a numeral Please enter a numeral ... Det skjer ikke ut til at den prøver på nytt med try {} - hvorfor ikke? Hvordan kan jeg få den til å gjøre dette? EDIT:Tittel. Gammel tittel: "Trøbbel med feilhåndtering og løkke". Tenkte det var likegreit å samle maset mitt i en lang tråd, stort sett "opplagt" syntaxtull og manglende erfaring som blokkerer uansett... Endret 12. desember 2005 av kyrsjo Lenke til kommentar
JBlack Skrevet 12. desember 2005 Del Skrevet 12. desember 2005 (endret) Wild guess: keyboard.nextInt() fjerner ikke ting fra inputstreamen dersom det den ikke får ikke er en integer. Dermed blir det samme liggende hele tiden. Prøv å flushe inputstreamen på en eller annen måte. Disclaimer: Har ikke programmert Java på årevis Edit: "If the translation is successful, the scanner advances past the input that matched. " Dermed kan man annta at dersom translation ikke var successful, så 'avanserer' den ikke forbi, men blir hengende. Endret 12. desember 2005 av JBlack Lenke til kommentar
kyrsjo Skrevet 12. desember 2005 Forfatter Del Skrevet 12. desember 2005 (endret) Wild guess: keyboard.nextInt() fjerner ikke ting fra inputstreamen dersom det den ikke får ikke er en integer. Dermed blir det samme liggende hele tiden. Prøv å flushe inputstreamen på en eller annen måte. Disclaimer: Har ikke programmert Java på årevis Edit: "If the translation is successful, the scanner advances past the input that matched. " Dermed kan man annta at dersom translation ikke var successful, så 'avanserer' den ikke forbi, men blir hengende. 5284526[/snapback] Ah. Lese dokumentasjonen er en finfin ting. Problemet var at jeg ikke ante hvor jeg skulle starte - har aldri brukt hverken scanner eller try/catch før... *lese* EDIT: Ble ikke så veldig mye klokere. Stod noe om posisjon til peker, men denne var ikke implementert (var ment for at subklasser skulle implementerer den). Urk. Menmen. prosjektet ruller videre! Er forøvrig en kaballøser - et program som finner alle mulige trær av trekk for en kabal, og regner ut litt statistikk. Først skal jeg få den til å løse en (tilfeldig generert) kabal, og så skal man gå igjennom alle 52! kabalene. Lukter distribuert prosjekt laaaang vei... Endret 12. desember 2005 av kyrsjo Lenke til kommentar
yonderboy Skrevet 12. desember 2005 Del Skrevet 12. desember 2005 Har ikke brukt scanner-klassen før, men tror dette gjør susen: public static int readIntFromKeyboard () { Scanner keyboard = new Scanner(System.in); int readInt = -1; boolean ready; do { ready = true; try { readInt = keyboard.nextInt(); } catch (InputMismatchException foo) { System.out.println("Please enter a numeral"); ready = false; keyboard.next(); // Tømmer scanneren hvis det ikke var en int } finally { } } while (!ready); return readInt; } Du får ha lykke til med de 52! permutasjonene da Lenke til kommentar
kyrsjo Skrevet 12. desember 2005 Forfatter Del Skrevet 12. desember 2005 Har ikke brukt scanner-klassen før, men tror dette gjør susen: public static int readIntFromKeyboard () { Scanner keyboard = new Scanner(System.in); int readInt = -1; boolean ready; do { ready = true; try { readInt = keyboard.nextInt(); } catch (InputMismatchException foo) { System.out.println("Please enter a numeral"); ready = false; keyboard.next(); // Tømmer scanneren hvis det ikke var en int } finally { } } while (!ready); return readInt; } Du får ha lykke til med de 52! permutasjonene da 5286795[/snapback] Woho! Det funka Takk! Nå lurer jeg på en ny ting: Jeg ønsker å lage en array av ArrayLists! Dette burde jo gå... Så jeg tenkte å gjøre noe ala: ArrayList[] <Card> lowerRows = new ArrayList [7] <Card> (); Problemet er bare at jeg får syntaxerror herifra til månen... Lenke til kommentar
yonderboy Skrevet 12. desember 2005 Del Skrevet 12. desember 2005 (endret) Nå lurer jeg på en ny ting: Jeg ønsker å lage en array av ArrayLists! Dette burde jo gå... Så jeg tenkte å gjøre noe ala: ArrayList[] <Card> lowerRows = new ArrayList [7] <Card> (); Problemet er bare at jeg får syntaxerror herifra til månen... 5287319[/snapback] Prøv dette: ArrayList<Card> lowerRows[] = new ArrayList[7]; for (int i=0; i<7; i++) lowerRows[i] = new ArrayList<Card>(); Det gir en unchecked/unsafe advarsel ved kompilering, men jeg vet ikke om noen måte å gjøre dette som ikke gir noen advarsel (med mindre du vil droppe å bruke generics). Edit: hadde rotet litt Endret 12. desember 2005 av yonderboy Lenke til kommentar
kyrsjo Skrevet 13. desember 2005 Forfatter Del Skrevet 13. desember 2005 Ahh. seff. ArrayList er jo et objekt, og når man lager array's av objekter så lager man først en array, og så et objekt. dumme meg. Lenke til kommentar
kyrsjo Skrevet 13. desember 2005 Forfatter Del Skrevet 13. desember 2005 Hakket meg rund det ved å opprette en klasse, slik: /**Hack in order to be able to create an array of ArrayLists, and still keep type safety. * * @author Kyrre Ness Sjøbæk * */ class CardHolder { public ArrayList <Card> heldCards = new ArrayList <Card> (); } Er ikke dette strengt tatt en bug i Java - at man ikke kan lage arrays av typesafe ArrayLists? Gjelder vel da sannsynligvis for HashMaps's også, og evt. andre typesafe "holdeklasser"... Får ta å teste at det ikke bare er eclipse sin compiler som loker, og evt. rapportere bug i fanget til Sun/IBM. Lenke til kommentar
yonderboy Skrevet 13. desember 2005 Del Skrevet 13. desember 2005 Er ikke dette strengt tatt en bug i Java - at man ikke kan lage arrays av typesafe ArrayLists? Gjelder vel da sannsynligvis for HashMaps's også, og evt. andre typesafe "holdeklasser"... Får ta å teste at det ikke bare er eclipse sin compiler som loker, og evt. rapportere bug i fanget til Sun/IBM. Det er nok ikke en bug - se den "offisielle" generics-tutorialen (http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf, avsnitt 7.3 side 15): The component type of an array object may not be a type variable or a parameterized type, unless it is an (unbounded) wildcard type.You can declare array types whose element type is a type variable or a parameterized type, but not array objects. Det er også noen oppklarende diskusjoner på forum.java.sun om emnet: http://forum.java.sun.com/thread.jspa?thre...30823&tstart=75 http://forum.java.sun.com/thread.jspa?foru...threadID=564355 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å