Trädvy Permalänk
Medlem
Registrerad
Feb 2017

HiLo - igen?!

Har stångat mig blodig med mitt stackars HiLo-spel för grundkursen i Java. Det mesta blir rätt utom två saker:

Scannern presenteras två gånger när jag ska gissa det första talet (efter att ha valt alternativ 1,2 eller 3)
Jag får inte maxNumber att fungera i slutet för System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);

Är det någon som har något tips?

import java.util.Scanner;
public class HiLoLabb1 {
public static int maxNumber;
public static int counter;
// public static int playGame(int maxNumber);

public static void main(String [] args) {

Scanner s = new Scanner(System.in);

int choice[] = {10, 100, 1000};
counter=1;

System.out.println("Välkommen till HiLo!");
System.out.println("Vilken svårighetsgrad?");
System.out.println("1. Lätt (1-10)");
System.out.println("2. Mellan (1-100)");
System.out.println("3. Svårt (1-1000)");

int player = s.nextInt();

if(player == 1) {
playGame(choice[0]);

}
else if(player == 2) {
playGame(choice[1]);

}
else if(player == 3) {
playGame(choice[2]);

}

else {
System.out.println("Välj ett värde mellan 1 och 3 nästa gång");

}
s.close();
}

static int playGame(int maxNumber)
{

Scanner s = new Scanner(System.in);

int answer = (int)(Math.random() * maxNumber) +1; {

System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
int guess = s.nextInt();

while(guess !=answer){
guess = s.nextInt();
giveResponse(guess, answer);
counter ++;

}
return guess;
}
}

static void giveResponse(int guess, int answer){

if (guess < 1) {
System.out.println("För lågt värde");
}

else if (guess > maxNumber){
System.out.println("För högt värde");
}

else if (guess < answer) {

System.out.println("Gissningen var för låg!");
System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

else if (guess > answer) {

System.out.println("Gissningen var för hög!");
System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

else if (guess == answer) {

System.out.println("Helt rätt!");
System.out.println("Du lyckades på "+counter+" försök");

}
}

}

Trädvy Permalänk
Medlem
Plats
Finland
Registrerad
Maj 2004

Lägg gärna koden inom [code][/code]-taggar så är den lättare att läsa.

Orsaken till att den läser in det första talet två gånger är följande kod:

int guess = s.nextInt(); while(guess !=answer){ guess = s.nextInt(); giveResponse(guess, answer); counter ++; }

Som du ser kommer den att köra både int guess = s.nextInt(); och guess = s.nextInt(); efter varandra första gången. Du kan kanske lösa det genom att byta ut din while till en do-while:

int guess; do { guess = s.nextInt(); giveResponse(guess, answer); counter++; } while(guess != answer);

Eftersom jämförelsen här flyttades till slutet, så behöver du inte ha ett värde på guess då loopen börjar.

Ditt andra problem beror på att giveResponse-metoden inte känner till maxNumber. Du har en static int maxNumber, men du ger den aldrig ett värde. Det att du i playGame också tar emot ett argument med namnet maxNumber betyder inte att det är samma variabel.

Du har två lösningar:

1. Du tar bort static int maxNumber och i playGame-metoden passar du vidare maxNumber till giveResponse. Den metoden blir alltså t.ex. giveResponse(int guess, int answer, int maxNumber).

2. I din main-metod sätter du maxNumber = choice[player]. Då har du gett static int maxNumber ett värde, och du behöver inte mera skicka den till playGame, utan den är nåbar från alla metoder.

Trädvy Permalänk
Medlem
Registrerad
Feb 2017

Tackar!

Nu fungerade det, jättestort tack för bra och tydlig feedback!