for loop med if og else?

Tags:    java

hej
jeg sidder og arbejder med denne her opgave i javabog.dk 5.(2.5.5. opgave 5 side 47)
- jeg kan godt lave opgaven - men ikke med loops, for hver gang den er gået igennem "if" og "else if" statements, stopper den. Jeg kan med andre ord ikke få den til at lave loops samtidig med at jeg bruger if og else if. Her er opgaven og nedenunder min kode

Lav spillet "Gæt hvilket tal jeg tænker på": Lav et program, der husker et tal fra 1 til 20, som brugeren skal gætte. Her er et forslag til dialogen med brugeren:
Gæt et tal: 8
Tallet jeg tænker på er højere.
Gæt et tal: 13
Tallet jeg tænker på er lavere.
Gæt et tal: 11
Det er det rigtige tal! Du brugte 3 forsøg.
Vink: Et tilfældigt tal mellem 1 og 20 kan fås med (int) (Math.random()*20 + 1)
public static void gætEtTal () {
Scanner myScanner = new Scanner(System.in);

int c =1;
int b=0;

System.out.println("Gæt et tal ! ");
int a=(int)( Math.random()*20+1);

if (b!=a) {
b = myScanner.nextInt();

System.out.println(a);
if (a>b)
System.out.println("tallet jeg tænker på er større ");


else if (a<b)
System.out.println("tallet jeg tænker på er mindre end det");

else if (a==b)
c++;
b = myScanner.nextInt();

System.out.println(a);
if (a>b)
System.out.println("tallet jeg tænker på er større ");


else if (a<b)
System.out.println("tallet jeg tænker på er mindre end det");
c++;
b = myScanner.nextInt();

System.out.println(a);
if (a>b)
System.out.println("tallet jeg tænker på er større ");


else if (a<b)
System.out.println("tallet jeg tænker på er mindre end det");
c++;
b = myScanner.nextInt();

System.out.println(a);
if (a>b)
System.out.println("tallet jeg tænker på er større ");


else if (a<b)
System.out.println("tallet jeg tænker på er mindre end det");
c++;
System.out.println(" Du gættede det på " + c + "forsøg");

}




3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
Du kan bruge en do while løkke til at løse problemet på følgende måde
Fold kodeboks ind/udJava kode 

do-while løkken fungerer på den måde at den vil kører mindst en gang. teorien i den er at den siger gør følgende, og herefter gør den følgende statements (tjekker med if sætninger). herefter når den til hvis (while) delen, hvor den siger hvis a != b. du har altså while løkken som dit tredje if, som er den der skal stoppe løkken.

Umiddelbart ser jeg ikke en for løkke som den rigtige løkke, da du med en for løkke er afhængig af en counter, og dermed er nødt til at have et specifikt antal forsøg til at løse spillet. while løkken eller do while løkken kører indtil det rigtige svar er fundet.

Lige en sidebemærkning, er at du også kan benytte dig af klassen Random, som ligger i java.util pakken, i stedet. Denne klasse kan arbejde direkte med integers, og man slipper derfor at lave en float om til en int.
Fold kodeboks ind/udJava kode 

Til sidst vil jeg give dig et godt råd, og det er at benytte variabel navne som er læselige. variabelnavne som a, b og c er hurtige, og sikkert også fine i små test eksempler, men det bliver hurtigt forvirrende og huske hvad variablen a nu engang skulle indeholde. Brug heller lidt tid til at navngive variablerne så de er lettere at forstå. f.eks. number1, number2 og count.
Fold kodeboks ind/udJava kode 




Indlæg senest redigeret d. 20.08.2013 22:44 af Bruger #4487
Hej Martin
Tak for hjælpen.
Det var en stor hjælp.
Tak



Jeg er selv lige startet på bogen og den opgave gav mig lidt hovedbrud. Kom frem til følgende løsning:

public class opg_2_5_5_5
{

public static void main (String[] arg)

{
java.util.Scanner tastatur = new java.util.Scanner(System.in);

int tænkttal = (int) (Math.random()*20 +1);
int gættal, count;
count = 0;
gættal = 0;

while (tænkttal != gættal)
{
System.out.println("Gæt et tal mellem 1 og 20:");
gættal = tastatur.nextInt();
if (gættal < tænkttal) System.out.println("Mit tal er højere");
else if (gættal > tænkttal) System.out.println("Mit tal er lavere");

count = count + 1; // kan også skrives count++
}

System.out.println("Du gættede rigtigt ! Du brugte kun " + count+ " forsøg");

}

}




t