Gå til innhold

Problemer med While løkke og litt små ting til.


Anbefalte innlegg

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
Videoannonse
Annonse

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 :p

Endret av frohmage
Lenke til kommentar

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

Synes slike oppgaver er så artige, så jeg laget liksågodt hele spillet til deg, enjoy :D

 

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 :thumbup:

edit: glemte telleren, men det får du nok til selv..

Endret av v3g4rd
Lenke til kommentar

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 :D 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 :thumbup:

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...