Princo82 Skrevet 9. april 2007 Del Skrevet 9. april 2007 Hei Vet at jeg må beskrive innhold i tråden i Emnetittel, men det var litt vanskelig. Det jeg trenger hjelp til er en skole oppgave. Jeg starter med selve oppgaven: Oppgave 1 (bruker løkker og valg, du trenger ikke array eller metoder) Lag et spill der maskinen trekker et tilfeldig tall mellom 1 og 100. Brukeren skal så gjette tallet. Maskinen svarer med å fortelle om tallet er for stort, for lite eller riktig. Brukeren fortsetter å gjette til han/hun har funnet riktig tall, eller velger å avslutte. Du kan la et negativt tall bety avslutt. Når brukeren har funnet tallet skal programmet oppgi hvor mange forsøk som ble brukt, og spørre om brukeren vil spille igjen. Her skal brukeren svare ja eller nei. Svarer brukeren ja presenteres et nytt spill; svarer brukeren nei avslutter programmet Min kode til nå: import javax.swing.*; public class Spill { public static void main(String[] args) { //setter de variablene vi trenger int tall1; int gjett; int teller; teller = 0; gjett = 0; tall1=(int)(Math.random()*101); //velger et tilfeldig tall mellom 1- 100 while ( (gjett != tall1) && (gjett>=0)) { // sjekker om bruker har gjettet riktig eller om bruker skriver inn negativt tall. String input=JOptionPane.showInputDialog("Maskinen har plukket ut et tall mellom 1- 100 Hvilket tall tror du at dette er?"); gjett=Integer.parseInt(input); if(tall1>gjett){ JOptionPane.showMessageDialog(null, "Tallet er større enn "+gjett); } else if (tall1<gjett){ JOptionPane.showMessageDialog(null, "Tallet er mindre enn "+gjett); } else{ JOptionPane.showMessageDialog(null, "Korrekt"); } teller ++; // øker teller med +1 for hver gang løkka blir kjørt } //enden på while løkka. JOptionPane.showMessageDialog(null, "Du brukte " +teller+ " ganger på å gjette at tallet var " +tall1); } } Problemet er at programmet ikke avsluttes med engang man skriver inn et negativt tall og trykke OK. Den sier at jeg har svart korrekt og at jeg brukte 0 ganger på å finne riktig svar. Vil at den skal avsluttes med engang. Jeg lurer også på hvordan jeg skal få til at den spør om jeg vil kjøre programmet på nytt eller avslutte og at man der skal skrive Ja/nei. Mvh Princo Lenke til kommentar
frohmage Skrevet 9. april 2007 Del Skrevet 9. april 2007 (endret) Kan du ikke bare slenge på "if gjett==tall1" eller noe foran linjene med "korrekt" og antall forsøk? edit: ser at du spurte om enda en ting ... java kunnskapene mine er litt for rustne til at jeg orker å sette meg inn i det Endret 9. april 2007 av frohmage Lenke til kommentar
maskefjes Skrevet 10. april 2007 Del Skrevet 10. april 2007 Du kan jo forsøke med en følgende etter du har hentet inn input fra bruker: if (gjett<0) { return; } Når det gjelder dette med å spille på nytt så ville jeg forsøkt med en ny while løkke utenfor den du har nå. Den bør vel starte over der du setter tall1 og avsluttes med etter der du skriver ut resultatet av forrige runde. Noe slikt: boolean nyttSpill = true; // Definerer en bolsk variabel for å holde orden på om det skal startes et nytt spill. while (nyttSpill) { tall1=(int)(Math.random()*101); //velger et tilfeldig tall mellom 1- 100 // Din kode her. } //enden på while løkka (den indre). JOptionPane.showMessageDialog(null, "Du brukte " +teller+ " ganger på å gjette at tallet var " +tall1); boolean rettSvar = false; while (!rettSvar) { String svar = OptionPane.showInputDialog("Vil du spille på nytt? [Ja] eller [Nei]"); if (svar.equalsIgnoreCase("Ja")) { nyttSpill = true; rettSvar = true; } else if (svar.equalsIgnoreCase("Nei")) { nyttSpill = false; rettSvar = true; } } //Slutt på den yttre while løkka Har ikke "prøvekjørt" koden så det er nok noen bugs her, men det bør hjelpe deg et stykke på veien kanskje. -/maskefjes Lenke til kommentar
v3g4rd Skrevet 10. april 2007 Del Skrevet 10. april 2007 (endret) Synes slike oppgaver er så artige, så jeg laget liksågodt hele spillet til deg, enjoy Klikk for å se/fjerne innholdet nedenfor import javax.swing.JOptionPane; public class gjett_Tallet { boolean nyttSpill = true; int gjettet = 0; int tallet = 0; int teller = 0; public gjett_Tallet () { while (nyttSpill) { tallet = (int)(Math.random()*100) + 1; /******Begynner gjetteprosedyren******/ while (gjettet != tallet) { try { gjettet = Integer.parseInt(JOptionPane.showInputDialog(null, "Hva tror du verdien er? [Mellom 1 og 100]\nTrykk \"Cancel\" for å avslutte")); if (gjettet < tallet) { System.out.println("Tallet er større enn " + gjettet); } else if (gjettet > tallet) { System.err.println("Tallet er mindre enn " + gjettet); } else { System.out.println("Du gjettet riktig!"); } } catch (NumberFormatException e) { break; } } /**********Nytt spill?***********/ String s = JOptionPane.showInputDialog(null, "Ønsker du å spille igjen?\n[Ja] eller [Nei]", "Nytt spill?"); try { if (s.equalsIgnoreCase("Nei")) { nullstill(); } } catch(NullPointerException e) { nullstill(); } } } public void nullstill() { gjettet = 0; teller = 0; tallet = 0; nyttSpill = false; System.out.println("Takk for at du spilte gjett_Tallet!:)"); } public static void main(String [] args) { gjett_Tallet g = new gjett_Tallet(); } } Testet spillet i eclipse, og funket finfint edit: glemte telleren, men det får du nok til selv.. Endret 10. april 2007 av v3g4rd Lenke til kommentar
Princo82 Skrevet 10. april 2007 Forfatter Del Skrevet 10. april 2007 Klikk for å se/fjerne innholdet nedenfor Du kan jo forsøke med en følgende etter du har hentet inn input fra bruker: if (gjett<0) { return; } Når det gjelder dette med å spille på nytt så ville jeg forsøkt med en ny while løkke utenfor den du har nå. Den bør vel starte over der du setter tall1 og avsluttes med etter der du skriver ut resultatet av forrige runde. Noe slikt: boolean nyttSpill = true; // Definerer en bolsk variabel for å holde orden på om det skal startes et nytt spill. while (nyttSpill) { tall1=(int)(Math.random()*101); //velger et tilfeldig tall mellom 1- 100 // Din kode her. } //enden på while løkka (den indre). JOptionPane.showMessageDialog(null, "Du brukte " +teller+ " ganger på å gjette at tallet var " +tall1); boolean rettSvar = false; while (!rettSvar) { String svar = OptionPane.showInputDialog("Vil du spille på nytt? [Ja] eller [Nei]"); if (svar.equalsIgnoreCase("Ja")) { nyttSpill = true; rettSvar = true; } else if (svar.equalsIgnoreCase("Nei")) { nyttSpill = false; rettSvar = true; } } //Slutt på den yttre while løkka Har ikke "prøvekjørt" koden så det er nok noen bugs her, men det bør hjelpe deg et stykke på veien kanskje. -/maskefjes 8350421[/snapback] Takk skal du ha Maskefjes. Det fungerte perfekt Takk for gode svar fra alle sammen og spesielt du Vegard som tok deg bryet med å lage hele programmet. Holdt meg til det jeg hadde og puttet inn det Maskefjes foreslo. Synes det er litt artigere å klare det "selv". Men takk for at dere tok dere bryet med å hjelpe meg. Saken er løst 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å