gol Skrevet 19. februar 2003 Del Skrevet 19. februar 2003 Jeg skal lage et program som skal "tenke" på et tall mellom 1 og 100. Deretter skal programmet spørre brukeren om å gjette et tall. • Dersom tallet er det samme som programmet "tenker" på skal programmet avslutte med en gratulasjon og beskjed om hvor mange forsøk som ble brukt. • Dersom tallet er mindre eller større enn det som programmet "tenker" på skal programmet bruker få en beskjed om dette. • Dersom tallet som gjettes er mindre enn 1 eller større enn 100 skal det komme en feilmelding som sier på nytt hvilket intervall det skal gjettes innenfor. Et slikt forsøk skal IKKE telle med i antall forsøk som telles opp. • Etter at brukeren har gjettet riktig og fått en gratulasjon skal han spørres om han vil prøve en gang til. Her er det jeg har til nå: class Gjett { public static void main(String[] args) { double tall = Math.random() * 100; int resultat = (int) tall; int tipp; int sum = 0; System.out.println("Jeg tenker på et tall mellom 1 og 100."); for (int i = resultat; i == resultat;) { System.out.println("Tipp et tall"); tipp = Terminal.lesInt(); if (tipp == resultat) break; if (tipp >= 1 && tipp <= 100) { if (tipp < resultat) System.out.println("Beklager! Mitt tall er større."); if (tipp > resultat) System.out.println("Beklager! Mitt tall er mindre."); } else System.out.println("Slå inn et tall mellom 1 og 100"); sum = sum + i; } System.out.println("Gratulerer! Du klarte det på " + sum + " forsøk"); } } Det jeg sliter med er å telle hvor mange forsøk som er brukt, og om en vil prøve en gang til etter å ha funne frem til tallet. Lenke til kommentar
Rikky Skrevet 19. februar 2003 Del Skrevet 19. februar 2003 Hadde et sånn program på kalkulatoren på videregående... Det ble utvidet i sånn omtrent hver eneste kjedelige time Lenke til kommentar
johanlo Skrevet 19. februar 2003 Del Skrevet 19. februar 2003 Det er en stund siden jeg har programmert Java, så jeg husker ikke syntaxen 100%... Du bruker for-løkken på feil måte. En for-løkke gjentar en kodesnutt x antall ganger. Det som du burde bruke er en nestet while-løkke. Pseudokoden blir som følger: while gjettemer { while mitt_tall <> tall then{ ... Her skal telleren være ... } } Lenke til kommentar
w3edr5t Skrevet 19. februar 2003 Del Skrevet 19. februar 2003 Her er en variant av gjett: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Gjett { private static int resultat = -1; private static int svar = -1; private static int antallSvar = 0; public static void main(String[] args) { boolean gjettigjen = true; while(gjettigjen) { System.out.println("Gjett et tall mellom 1 og 100"); resultat = (int)(Math.random()*100); antallSvar = 0; gjett(); gjettigjen = gjettMer(); } } private static void gjett() { while(resultat != svar) { svar = lesTall(); if(svar < resultat) System.out.println("Gjett høyere!"); if(svar > resultat) System.out.println("Gjett lavere!"); if(svar>100 || svar<1) { System.out.println("Bare svar mellom 1 og 100 takk!"); } else { antallSvar++; } } System.out.println("Grattis, du gjettet tallet på " + antallSvar + " forsøk"); } private static String lesInput() { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try { return reader.readLine(); } catch (IOException e) { System.out.println("Kunne ikke lese input, avslutter programmet"); System.exit(0); } return ""; } private static int lesTall() { //les inn et tall while(true) { System.out.println("Tipp et tall: "); try { return Integer.parseInt(lesInput()); } catch(NumberFormatException e) { } } } private static boolean gjettMer() { //spør brukeren om han vil spille mer while(true) { System.out.println("Vil du spille en gang til? (J/N)"); String svar = lesInput(); if(svar.equalsIgnoreCase("J")) { return true; } else if(svar.equalsIgnoreCase("N")) { return false; } } } } Lenke til kommentar
unwill Skrevet 20. februar 2003 Del Skrevet 20. februar 2003 Å telle hvor mange ganger personen er gjettet vil ikke bli vanskelig, bare å legge til en teller... Som nevnt er forløkken din feil... Burde brukt en while, men en for går også... Lenke til kommentar
unwill Skrevet 20. februar 2003 Del Skrevet 20. februar 2003 Sånn... nå er den ferdig: Her er Gjett klassen din: class Gjett { public static void main(String[] args) { int tipp = 0; int j=0; TastaturLeser tastatur = new TastaturLeser(); System.out.println("Jeg tenker på et tall mellom 1 og 100."); while (j==0){ int tall = (int)(Math.random()*100); int sum = 0; System.out.println("Tipp et tall"); while (tipp != tall) { tipp = tastatur.lesHeltall(); if (tipp >= 1 && tipp <= 100) { if (tipp < tall) System.out.println("Beklager! Mitt tall er større."); if (tipp > tall) System.out.println("Beklager! Mitt tall er mindre."); } else System.out.println("Slå inn et tall mellom 1 og 100"); sum++; } System.out.println("Gratulerer! Du klarte det på " + sum + " forsøk"); System.out.println("Vil du spille igjen? Tast 0 for å spille igjen"); j = tastatur.lesHeltall(); } } } Siden du ikke ga meg Terminalklassen så brukte jeg bare en Tasaturleser klasse som jeg hadde fra før av... antakeligvis en som gjør det samme som din Terminal klasse... /** En klasse for å lese fra tastatur *@version 20.02.03 *@author William Young */ import java.io.*; public class TastaturLeser { private BufferedReader input; /**Standard Konstruktor. * *Oppretter et nytt Tasatur objekt. */ public TastaturLeser() { input = new BufferedReader(new InputStreamReader(System.in)); } /**Metode som et tall. *@return tallet som blir lest. *@exception kan få en IOException som vi kaller ex */ public int lesHeltall() { try { return Integer.parseInt(input.readLine()); } catch (Exception ex) { System.out.println("Feil under lesing av heltall"); return 0; } } } Forandring som jeg har gjort... brukte to while løkker siden jeg syns de passer bedre En annen ting er at du kan deklarere og caste i samme linje, unødvendig å lage så mange midlertidige variabler... Eller har jeg gjort om koden din til en format som er leselig for andre også... mye lettere å lese koder som er i riktig format. Hvis det er noe i koden min som du ikke forstår er det bare å spørre... Lenke til kommentar
gol Skrevet 22. februar 2003 Forfatter Del Skrevet 22. februar 2003 Takk for hjelpen, nå fikk jeg det til. Og det beste av alt, jeg forsto hva som var blitt gjort. Lenke til kommentar
unwill Skrevet 22. februar 2003 Del Skrevet 22. februar 2003 Bare hyggelig, fant en liten bug, det er at når man trykker et tall over 100 så blir det også regnet som et forsøk, du greier vel å fixe det selv? Lenke til kommentar
gol Skrevet 22. februar 2003 Forfatter Del Skrevet 22. februar 2003 Ja det fikset jeg. Har kontroll nå :smile: Lenke til kommentar
Grokster Skrevet 3. mars 2003 Del Skrevet 3. mars 2003 kanskje litt sent men ser dere som har kommenteret denne programsnutten den lille feilen, som gjør at programmet kan gå i en evig løkke?? en liten tue kan velte et stort lass som den gjorde her:-) Grokster Lenke til kommentar
unwill Skrevet 3. mars 2003 Del Skrevet 3. mars 2003 kanskje litt sent men ser dere som har kommenteret denne programsnutten den lille feilen, som gjør at programmet kan gå i en evig løkke?? en liten tue kan velte et stort lass som den gjorde her:-) Grokster Hvor? Lenke til kommentar
Grokster Skrevet 4. mars 2003 Del Skrevet 4. mars 2003 her: int tall = (int)(Math.random()*100); dette fører til at du får et tall fra 0 til 99 riktig skal da være: int tall = 1 + (int)(Math.random()*100); som sagt bare en bitteliten feil, men hvis maskinen gir deg 0 og du skal prøve å finne ut dette, så får du jo aldri lov til å velge 0, og dermed en liten neverending story..... Lenke til kommentar
unwill Skrevet 4. mars 2003 Del Skrevet 4. mars 2003 Aha Seff... 1 % sjanse at den feilen inntreffer... Lenke til kommentar
slips Skrevet 5. mars 2003 Del Skrevet 5. mars 2003 Du burde kanske vurdere å endre programmet slik at det ikke "tenker på" et tall mellom 1 og 100, men kanskje 1 og 100000.. Ikke at det blir så mye enklere i prinsippet, men det virker i alle fall slik. Å finne tallet mellom 1 og 100 vil aldri ta mer enn 7 gjett (hvis du halverer hver gang). Sånn sett så vil du måtte bruke 18 gjett på å finne det ut tallet mellom 1 og 100000. Lenke til kommentar
unwill Skrevet 5. mars 2003 Del Skrevet 5. mars 2003 Du burde kanske vurdere å endre programmet slik at det ikke "tenker på" et tall mellom 1 og 100, men kanskje 1 og 100000.. Ikke at det blir så mye enklere i prinsippet, men det virker i alle fall slik. Å finne tallet mellom 1 og 100 vil aldri ta mer enn 7 gjett (hvis du halverer hver gang). Sånn sett så vil du måtte bruke 18 gjett på å finne det ut tallet mellom 1 og 100000. Kunne jo forsåvidt brukt double istedenfor int Da kan det være gøy å prøve 10.45434604830 Lenke til kommentar
slips Skrevet 5. mars 2003 Del Skrevet 5. mars 2003 Kunne jo forsåvidt brukt double istedenfor int Da kan det være gøy å prøve 10.45434604830 Hehe. Hadde nok blitt endel vanskeligere ihvertfall. Det er jo umulig å gjette antall siffer etter komma, med mindre programmet sier f.eks "Du har 4 siffer feil etter komma" En ting man kunne gjort var å la programmet si om du var nærmere eller lengre unna enn på forrige gjett.. Det hadde gjort det litt anderledes. 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å